{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f02249e2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing libaries\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7c6ddce9",
   "metadata": {},
   "outputs": [],
   "source": [
    "class LEMCell(nn.Module):\n",
    "    def __init__(self, ninp, nhid, dt):\n",
    "        super(LEMCell, self).__init__()\n",
    "        self.ninp = ninp\n",
    "        self.nhid = nhid\n",
    "        self.dt = dt\n",
    "        self.inp2hid = nn.Linear(ninp, 4 * nhid)\n",
    "        self.hid2hid = nn.Linear(nhid, 3 * nhid)\n",
    "        self.transform_z = nn.Linear(nhid, nhid)\n",
    "        self.reset_parameters()\n",
    "\n",
    "    def reset_parameters(self):\n",
    "        std = 1.0 / np.sqrt(self.nhid)\n",
    "        for w in self.parameters():\n",
    "            w.data.uniform_(-std, std)\n",
    "\n",
    "    def forward(self, x, y, z):\n",
    "        transformed_inp = self.inp2hid(x)\n",
    "        transformed_hid = self.hid2hid(y)\n",
    "        i_dt1, i_dt2, i_z, i_y = transformed_inp.chunk(4, 1)\n",
    "        h_dt1, h_dt2, h_y = transformed_hid.chunk(3, 1)\n",
    "\n",
    "        ms_dt_bar = self.dt * torch.sigmoid(i_dt1 + h_dt1)\n",
    "        ms_dt = self.dt * torch.sigmoid(i_dt2 + h_dt2)\n",
    "\n",
    "        z = (1. - ms_dt) * z + ms_dt * torch.tanh(i_y + h_y)\n",
    "        y = (1. - ms_dt_bar) * y + ms_dt_bar * torch.tanh(self.transform_z(z) + i_z)\n",
    "\n",
    "        return y, z\n",
    "\n",
    "# Define the LEM model\n",
    "class LEM(nn.Module):\n",
    "    def __init__(self, ninp, nhid, nout, dt=1.):\n",
    "        super(LEM, self).__init__()\n",
    "        self.nhid = nhid\n",
    "        self.cell = LEMCell(ninp, nhid, dt)\n",
    "        self.classifier = nn.Linear(nhid, nout)\n",
    "        self.init_weights()\n",
    "\n",
    "    def init_weights(self):\n",
    "        for name, param in self.named_parameters():\n",
    "            if 'classifier' in name and 'weight' in name:\n",
    "                nn.init.kaiming_normal_(param.data)\n",
    "\n",
    "    def forward(self, input):\n",
    "        y = input.data.new(input.size(1), self.nhid).zero_()\n",
    "        z = input.data.new(input.size(1), self.nhid).zero_()\n",
    "        for x in input:\n",
    "            y, z = self.cell(x, y, z)\n",
    "        out = self.classifier(y)\n",
    "        return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "36d6fa55",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Toy problem data\n",
    "input_size = 256  # number of columns in a dataset\n",
    "hidden_size = 32  # number of neurons\n",
    "output_size = 256  \n",
    "sequence_length = 160  # number of sequences/ number of rows\n",
    "batch_size = 1\n",
    "num_epochs = 20000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "f6a2ae56",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "2103e0ff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Thu Jul 20 15:02:48 2023',\n",
       " '__version__': '1.0',\n",
       " '__globals__': [],\n",
       " 'h': array([[0.03949907, 0.03945555, 0.03968762, ..., 0.04081577, 0.04034067,\n",
       "         0.03995187],\n",
       "        [0.03949522, 0.03972834, 0.04007071, ..., 0.0406224 , 0.0405568 ,\n",
       "         0.04021852],\n",
       "        [0.03980837, 0.03966293, 0.04008707, ..., 0.04077249, 0.04050591,\n",
       "         0.04019281],\n",
       "        ...,\n",
       "        [0.04915863, 0.04935256, 0.04961976, ..., 0.04917885, 0.04899574,\n",
       "         0.04881741],\n",
       "        [0.04904458, 0.04916197, 0.04943338, ..., 0.04902097, 0.04897786,\n",
       "         0.04875013],\n",
       "        [0.04913692, 0.04932824, 0.04941899, ..., 0.04888785, 0.0488357 ,\n",
       "         0.04855312]])}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load the .mat file\n",
    "v_data = scipy.io.loadmat('v.mat')\n",
    "h_data = scipy.io.loadmat('h.mat')\n",
    "x_data = scipy.io.loadmat('x.mat')\n",
    "h_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "172f53d3",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = x_data['X']\n",
    "u = h_data['h']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "2cd6fd81",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(201, 256)\n",
      "(201, 256)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[0.03949907, 0.03945555, 0.03968762, ..., 0.04081577, 0.04034067,\n",
       "        0.03995187],\n",
       "       [0.03949522, 0.03972834, 0.04007071, ..., 0.0406224 , 0.0405568 ,\n",
       "        0.04021852],\n",
       "       [0.03980837, 0.03966293, 0.04008707, ..., 0.04077249, 0.04050591,\n",
       "        0.04019281],\n",
       "       ...,\n",
       "       [0.04915863, 0.04935256, 0.04961976, ..., 0.04917885, 0.04899574,\n",
       "        0.04881741],\n",
       "       [0.04904458, 0.04916197, 0.04943338, ..., 0.04902097, 0.04897786,\n",
       "        0.04875013],\n",
       "       [0.04913692, 0.04932824, 0.04941899, ..., 0.04888785, 0.0488357 ,\n",
       "        0.04855312]])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(x.shape)\n",
    "print(u.shape)\n",
    "u"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "bf954b1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7f5a68123790>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set random seed for reproducibility\n",
    "torch.manual_seed(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "cdabefdf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test data shape (40, 256)\n",
      "test target shape (40, 256)\n",
      "input data shape (160, 256)\n",
      "Target data shape (160, 256)\n"
     ]
    }
   ],
   "source": [
    "input_data = u[0:160,:]\n",
    "target_data = u[1:161, :]\n",
    "\n",
    "test_data = u[160:200, :]\n",
    "test_target = u[161:201, :]\n",
    "\n",
    "print(\"test data shape\", test_data.shape)\n",
    "print(\"test target shape\", test_target.shape)\n",
    "\n",
    "print(\"input data shape\",input_data.shape)\n",
    "print(\"Target data shape\",target_data.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b32d98b1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input tensor shape torch.Size([1, 160, 256])\n",
      "Target tensor shape torch.Size([1, 160, 256])\n"
     ]
    }
   ],
   "source": [
    "# Convert data to tensors\n",
    "input_tensor = torch.tensor(input_data).view(batch_size, sequence_length, input_size).float()\n",
    "target_tensor = torch.tensor(target_data).view(batch_size, sequence_length, output_size).float()\n",
    "\n",
    "print(\"input tensor shape\",input_tensor.shape)\n",
    "print(\"Target tensor shape\",target_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b4c0af1d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convert test data to tensors\n",
    "test_tensor = torch.tensor(test_data).view(batch_size, 40, input_size).float()\n",
    "test_target_tensor = torch.tensor(test_target).view(batch_size, 40, output_size).float()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "928ae47f",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/data/localhome/tkapoor/.local/lib/python3.8/site-packages/torch/nn/modules/loss.py:520: UserWarning: Using a target size (torch.Size([1, 160, 256])) that is different to the input size (torch.Size([160, 256])). This will likely lead to incorrect results due to broadcasting. Please ensure they have the same size.\n",
      "  return F.mse_loss(input, target, reduction=self.reduction)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 10/20000, Loss: 0.688335\n",
      "Epoch: 20/20000, Loss: 0.644207\n",
      "Epoch: 30/20000, Loss: 0.603241\n",
      "Epoch: 40/20000, Loss: 0.560971\n",
      "Epoch: 50/20000, Loss: 0.518000\n",
      "Epoch: 60/20000, Loss: 0.479887\n",
      "Epoch: 70/20000, Loss: 0.447305\n",
      "Epoch: 80/20000, Loss: 0.418399\n",
      "Epoch: 90/20000, Loss: 0.392489\n",
      "Epoch: 100/20000, Loss: 0.369106\n",
      "Epoch: 110/20000, Loss: 0.347846\n",
      "Epoch: 120/20000, Loss: 0.328397\n",
      "Epoch: 130/20000, Loss: 0.310514\n",
      "Epoch: 140/20000, Loss: 0.294003\n",
      "Epoch: 150/20000, Loss: 0.278706\n",
      "Epoch: 160/20000, Loss: 0.264493\n",
      "Epoch: 170/20000, Loss: 0.251253\n",
      "Epoch: 180/20000, Loss: 0.238891\n",
      "Epoch: 190/20000, Loss: 0.227325\n",
      "Epoch: 200/20000, Loss: 0.216485\n",
      "Epoch: 210/20000, Loss: 0.206308\n",
      "Epoch: 220/20000, Loss: 0.196740\n",
      "Epoch: 230/20000, Loss: 0.187732\n",
      "Epoch: 240/20000, Loss: 0.179241\n",
      "Epoch: 250/20000, Loss: 0.171230\n",
      "Epoch: 260/20000, Loss: 0.163663\n",
      "Epoch: 270/20000, Loss: 0.156509\n",
      "Epoch: 280/20000, Loss: 0.149742\n",
      "Epoch: 290/20000, Loss: 0.143335\n",
      "Epoch: 300/20000, Loss: 0.137267\n",
      "Epoch: 310/20000, Loss: 0.131517\n",
      "Epoch: 320/20000, Loss: 0.126065\n",
      "Epoch: 330/20000, Loss: 0.120895\n",
      "Epoch: 340/20000, Loss: 0.115991\n",
      "Epoch: 350/20000, Loss: 0.111338\n",
      "Epoch: 360/20000, Loss: 0.106922\n",
      "Epoch: 370/20000, Loss: 0.102731\n",
      "Epoch: 380/20000, Loss: 0.098754\n",
      "Epoch: 390/20000, Loss: 0.094979\n",
      "Epoch: 400/20000, Loss: 0.091397\n",
      "Epoch: 410/20000, Loss: 0.087997\n",
      "Epoch: 420/20000, Loss: 0.084772\n",
      "Epoch: 430/20000, Loss: 0.081711\n",
      "Epoch: 440/20000, Loss: 0.078808\n",
      "Epoch: 450/20000, Loss: 0.076055\n",
      "Epoch: 460/20000, Loss: 0.073444\n",
      "Epoch: 470/20000, Loss: 0.070968\n",
      "Epoch: 480/20000, Loss: 0.068622\n",
      "Epoch: 490/20000, Loss: 0.066400\n",
      "Epoch: 500/20000, Loss: 0.064294\n",
      "Epoch: 510/20000, Loss: 0.062300\n",
      "Epoch: 520/20000, Loss: 0.060412\n",
      "Epoch: 530/20000, Loss: 0.058625\n",
      "Epoch: 540/20000, Loss: 0.056934\n",
      "Epoch: 550/20000, Loss: 0.055335\n",
      "Epoch: 560/20000, Loss: 0.053823\n",
      "Epoch: 570/20000, Loss: 0.052394\n",
      "Epoch: 580/20000, Loss: 0.051044\n",
      "Epoch: 590/20000, Loss: 0.049769\n",
      "Epoch: 600/20000, Loss: 0.048565\n",
      "Epoch: 610/20000, Loss: 0.047429\n",
      "Epoch: 620/20000, Loss: 0.046357\n",
      "Epoch: 630/20000, Loss: 0.045346\n",
      "Epoch: 640/20000, Loss: 0.044393\n",
      "Epoch: 650/20000, Loss: 0.043494\n",
      "Epoch: 660/20000, Loss: 0.042649\n",
      "Epoch: 670/20000, Loss: 0.041852\n",
      "Epoch: 680/20000, Loss: 0.041103\n",
      "Epoch: 690/20000, Loss: 0.040397\n",
      "Epoch: 700/20000, Loss: 0.039734\n",
      "Epoch: 710/20000, Loss: 0.039111\n",
      "Epoch: 720/20000, Loss: 0.038526\n",
      "Epoch: 730/20000, Loss: 0.037976\n",
      "Epoch: 740/20000, Loss: 0.037460\n",
      "Epoch: 750/20000, Loss: 0.036975\n",
      "Epoch: 760/20000, Loss: 0.036521\n",
      "Epoch: 770/20000, Loss: 0.036096\n",
      "Epoch: 780/20000, Loss: 0.035697\n",
      "Epoch: 790/20000, Loss: 0.035323\n",
      "Epoch: 800/20000, Loss: 0.034973\n",
      "Epoch: 810/20000, Loss: 0.034646\n",
      "Epoch: 820/20000, Loss: 0.034340\n",
      "Epoch: 830/20000, Loss: 0.034054\n",
      "Epoch: 840/20000, Loss: 0.033787\n",
      "Epoch: 850/20000, Loss: 0.033537\n",
      "Epoch: 860/20000, Loss: 0.033304\n",
      "Epoch: 870/20000, Loss: 0.033087\n",
      "Epoch: 880/20000, Loss: 0.032885\n",
      "Epoch: 890/20000, Loss: 0.032696\n",
      "Epoch: 900/20000, Loss: 0.032520\n",
      "Epoch: 910/20000, Loss: 0.032356\n",
      "Epoch: 920/20000, Loss: 0.032204\n",
      "Epoch: 930/20000, Loss: 0.032062\n",
      "Epoch: 940/20000, Loss: 0.031930\n",
      "Epoch: 950/20000, Loss: 0.031808\n",
      "Epoch: 960/20000, Loss: 0.031694\n",
      "Epoch: 970/20000, Loss: 0.031589\n",
      "Epoch: 980/20000, Loss: 0.031491\n",
      "Epoch: 990/20000, Loss: 0.031400\n",
      "Epoch: 1000/20000, Loss: 0.031316\n",
      "Epoch: 1010/20000, Loss: 0.031238\n",
      "Epoch: 1020/20000, Loss: 0.031166\n",
      "Epoch: 1030/20000, Loss: 0.031099\n",
      "Epoch: 1040/20000, Loss: 0.031038\n",
      "Epoch: 1050/20000, Loss: 0.030981\n",
      "Epoch: 1060/20000, Loss: 0.030928\n",
      "Epoch: 1070/20000, Loss: 0.030879\n",
      "Epoch: 1080/20000, Loss: 0.030834\n",
      "Epoch: 1090/20000, Loss: 0.030793\n",
      "Epoch: 1100/20000, Loss: 0.030755\n",
      "Epoch: 1110/20000, Loss: 0.030720\n",
      "Epoch: 1120/20000, Loss: 0.030688\n",
      "Epoch: 1130/20000, Loss: 0.030658\n",
      "Epoch: 1140/20000, Loss: 0.030631\n",
      "Epoch: 1150/20000, Loss: 0.030605\n",
      "Epoch: 1160/20000, Loss: 0.030582\n",
      "Epoch: 1170/20000, Loss: 0.030561\n",
      "Epoch: 1180/20000, Loss: 0.030542\n",
      "Epoch: 1190/20000, Loss: 0.030524\n",
      "Epoch: 1200/20000, Loss: 0.030508\n",
      "Epoch: 1210/20000, Loss: 0.030493\n",
      "Epoch: 1220/20000, Loss: 0.030479\n",
      "Epoch: 1230/20000, Loss: 0.030466\n",
      "Epoch: 1240/20000, Loss: 0.030455\n",
      "Epoch: 1250/20000, Loss: 0.030444\n",
      "Epoch: 1260/20000, Loss: 0.030435\n",
      "Epoch: 1270/20000, Loss: 0.030426\n",
      "Epoch: 1280/20000, Loss: 0.030418\n",
      "Epoch: 1290/20000, Loss: 0.030411\n",
      "Epoch: 1300/20000, Loss: 0.030404\n",
      "Epoch: 1310/20000, Loss: 0.030398\n",
      "Epoch: 1320/20000, Loss: 0.030393\n",
      "Epoch: 1330/20000, Loss: 0.030388\n",
      "Epoch: 1340/20000, Loss: 0.030383\n",
      "Epoch: 1350/20000, Loss: 0.030379\n",
      "Epoch: 1360/20000, Loss: 0.030375\n",
      "Epoch: 1370/20000, Loss: 0.030372\n",
      "Epoch: 1380/20000, Loss: 0.030368\n",
      "Epoch: 1390/20000, Loss: 0.030366\n",
      "Epoch: 1400/20000, Loss: 0.030363\n",
      "Epoch: 1410/20000, Loss: 0.030361\n",
      "Epoch: 1420/20000, Loss: 0.030358\n",
      "Epoch: 1430/20000, Loss: 0.030356\n",
      "Epoch: 1440/20000, Loss: 0.030355\n",
      "Epoch: 1450/20000, Loss: 0.030353\n",
      "Epoch: 1460/20000, Loss: 0.030352\n",
      "Epoch: 1470/20000, Loss: 0.030350\n",
      "Epoch: 1480/20000, Loss: 0.030349\n",
      "Epoch: 1490/20000, Loss: 0.030348\n",
      "Epoch: 1500/20000, Loss: 0.030347\n",
      "Epoch: 1510/20000, Loss: 0.030346\n",
      "Epoch: 1520/20000, Loss: 0.030345\n",
      "Epoch: 1530/20000, Loss: 0.030344\n",
      "Epoch: 1540/20000, Loss: 0.030343\n",
      "Epoch: 1550/20000, Loss: 0.030342\n",
      "Epoch: 1560/20000, Loss: 0.030342\n",
      "Epoch: 1570/20000, Loss: 0.030341\n",
      "Epoch: 1580/20000, Loss: 0.030340\n",
      "Epoch: 1590/20000, Loss: 0.030339\n",
      "Epoch: 1600/20000, Loss: 0.030339\n",
      "Epoch: 1610/20000, Loss: 0.030338\n",
      "Epoch: 1620/20000, Loss: 0.030337\n",
      "Epoch: 1630/20000, Loss: 0.030336\n",
      "Epoch: 1640/20000, Loss: 0.030335\n",
      "Epoch: 1650/20000, Loss: 0.030334\n",
      "Epoch: 1660/20000, Loss: 0.030333\n",
      "Epoch: 1670/20000, Loss: 0.030331\n",
      "Epoch: 1680/20000, Loss: 0.030329\n",
      "Epoch: 1690/20000, Loss: 0.030326\n",
      "Epoch: 1700/20000, Loss: 0.030316\n",
      "Epoch: 1710/20000, Loss: 0.030153\n",
      "Epoch: 1720/20000, Loss: 0.030074\n",
      "Epoch: 1730/20000, Loss: 0.030002\n",
      "Epoch: 1740/20000, Loss: 0.029907\n",
      "Epoch: 1750/20000, Loss: 0.029785\n",
      "Epoch: 1760/20000, Loss: 0.029641\n",
      "Epoch: 1770/20000, Loss: 0.029483\n",
      "Epoch: 1780/20000, Loss: 0.029309\n",
      "Epoch: 1790/20000, Loss: 0.029118\n",
      "Epoch: 1800/20000, Loss: 0.028914\n",
      "Epoch: 1810/20000, Loss: 0.028700\n",
      "Epoch: 1820/20000, Loss: 0.028481\n",
      "Epoch: 1830/20000, Loss: 0.028259\n",
      "Epoch: 1840/20000, Loss: 0.028036\n",
      "Epoch: 1850/20000, Loss: 0.027812\n",
      "Epoch: 1860/20000, Loss: 0.027590\n",
      "Epoch: 1870/20000, Loss: 0.027370\n",
      "Epoch: 1880/20000, Loss: 0.027152\n",
      "Epoch: 1890/20000, Loss: 0.026936\n",
      "Epoch: 1900/20000, Loss: 0.026724\n",
      "Epoch: 1910/20000, Loss: 0.026514\n",
      "Epoch: 1920/20000, Loss: 0.026307\n",
      "Epoch: 1930/20000, Loss: 0.026104\n",
      "Epoch: 1940/20000, Loss: 0.025904\n",
      "Epoch: 1950/20000, Loss: 0.025707\n",
      "Epoch: 1960/20000, Loss: 0.025513\n",
      "Epoch: 1970/20000, Loss: 0.025323\n",
      "Epoch: 1980/20000, Loss: 0.025135\n",
      "Epoch: 1990/20000, Loss: 0.024951\n",
      "Epoch: 2000/20000, Loss: 0.024769\n",
      "Epoch: 2010/20000, Loss: 0.024590\n",
      "Epoch: 2020/20000, Loss: 0.024414\n",
      "Epoch: 2030/20000, Loss: 0.024241\n",
      "Epoch: 2040/20000, Loss: 0.024070\n",
      "Epoch: 2050/20000, Loss: 0.023901\n",
      "Epoch: 2060/20000, Loss: 0.023735\n",
      "Epoch: 2070/20000, Loss: 0.023572\n",
      "Epoch: 2080/20000, Loss: 0.023410\n",
      "Epoch: 2090/20000, Loss: 0.023251\n",
      "Epoch: 2100/20000, Loss: 0.023094\n",
      "Epoch: 2110/20000, Loss: 0.022939\n",
      "Epoch: 2120/20000, Loss: 0.022786\n",
      "Epoch: 2130/20000, Loss: 0.022636\n",
      "Epoch: 2140/20000, Loss: 0.022487\n",
      "Epoch: 2150/20000, Loss: 0.022339\n",
      "Epoch: 2160/20000, Loss: 0.022194\n",
      "Epoch: 2170/20000, Loss: 0.022050\n",
      "Epoch: 2180/20000, Loss: 0.021908\n",
      "Epoch: 2190/20000, Loss: 0.021768\n",
      "Epoch: 2200/20000, Loss: 0.021629\n",
      "Epoch: 2210/20000, Loss: 0.021492\n",
      "Epoch: 2220/20000, Loss: 0.021357\n",
      "Epoch: 2230/20000, Loss: 0.021223\n",
      "Epoch: 2240/20000, Loss: 0.021090\n",
      "Epoch: 2250/20000, Loss: 0.020959\n",
      "Epoch: 2260/20000, Loss: 0.020829\n",
      "Epoch: 2270/20000, Loss: 0.020700\n",
      "Epoch: 2280/20000, Loss: 0.020573\n",
      "Epoch: 2290/20000, Loss: 0.020447\n",
      "Epoch: 2300/20000, Loss: 0.020323\n",
      "Epoch: 2310/20000, Loss: 0.020199\n",
      "Epoch: 2320/20000, Loss: 0.020077\n",
      "Epoch: 2330/20000, Loss: 0.019956\n",
      "Epoch: 2340/20000, Loss: 0.019836\n",
      "Epoch: 2350/20000, Loss: 0.019717\n",
      "Epoch: 2360/20000, Loss: 0.019600\n",
      "Epoch: 2370/20000, Loss: 0.019483\n",
      "Epoch: 2380/20000, Loss: 0.019368\n",
      "Epoch: 2390/20000, Loss: 0.019253\n",
      "Epoch: 2400/20000, Loss: 0.019140\n",
      "Epoch: 2410/20000, Loss: 0.019027\n",
      "Epoch: 2420/20000, Loss: 0.018916\n",
      "Epoch: 2430/20000, Loss: 0.018805\n",
      "Epoch: 2440/20000, Loss: 0.018696\n",
      "Epoch: 2450/20000, Loss: 0.018587\n",
      "Epoch: 2460/20000, Loss: 0.018479\n",
      "Epoch: 2470/20000, Loss: 0.018373\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 2480/20000, Loss: 0.018267\n",
      "Epoch: 2490/20000, Loss: 0.018162\n",
      "Epoch: 2500/20000, Loss: 0.018057\n",
      "Epoch: 2510/20000, Loss: 0.017954\n",
      "Epoch: 2520/20000, Loss: 0.017851\n",
      "Epoch: 2530/20000, Loss: 0.017750\n",
      "Epoch: 2540/20000, Loss: 0.017649\n",
      "Epoch: 2550/20000, Loss: 0.017548\n",
      "Epoch: 2560/20000, Loss: 0.017449\n",
      "Epoch: 2570/20000, Loss: 0.017350\n",
      "Epoch: 2580/20000, Loss: 0.017252\n",
      "Epoch: 2590/20000, Loss: 0.017155\n",
      "Epoch: 2600/20000, Loss: 0.017058\n",
      "Epoch: 2610/20000, Loss: 0.016962\n",
      "Epoch: 2620/20000, Loss: 0.016867\n",
      "Epoch: 2630/20000, Loss: 0.016773\n",
      "Epoch: 2640/20000, Loss: 0.016679\n",
      "Epoch: 2650/20000, Loss: 0.016586\n",
      "Epoch: 2660/20000, Loss: 0.016493\n",
      "Epoch: 2670/20000, Loss: 0.016401\n",
      "Epoch: 2680/20000, Loss: 0.016310\n",
      "Epoch: 2690/20000, Loss: 0.016220\n",
      "Epoch: 2700/20000, Loss: 0.016130\n",
      "Epoch: 2710/20000, Loss: 0.016040\n",
      "Epoch: 2720/20000, Loss: 0.015952\n",
      "Epoch: 2730/20000, Loss: 0.015863\n",
      "Epoch: 2740/20000, Loss: 0.015776\n",
      "Epoch: 2750/20000, Loss: 0.015689\n",
      "Epoch: 2760/20000, Loss: 0.015602\n",
      "Epoch: 2770/20000, Loss: 0.015517\n",
      "Epoch: 2780/20000, Loss: 0.015431\n",
      "Epoch: 2790/20000, Loss: 0.015347\n",
      "Epoch: 2800/20000, Loss: 0.015262\n",
      "Epoch: 2810/20000, Loss: 0.015179\n",
      "Epoch: 2820/20000, Loss: 0.015096\n",
      "Epoch: 2830/20000, Loss: 0.015013\n",
      "Epoch: 2840/20000, Loss: 0.014931\n",
      "Epoch: 2850/20000, Loss: 0.014850\n",
      "Epoch: 2860/20000, Loss: 0.014769\n",
      "Epoch: 2870/20000, Loss: 0.014688\n",
      "Epoch: 2880/20000, Loss: 0.014608\n",
      "Epoch: 2890/20000, Loss: 0.014529\n",
      "Epoch: 2900/20000, Loss: 0.014450\n",
      "Epoch: 2910/20000, Loss: 0.014371\n",
      "Epoch: 2920/20000, Loss: 0.014293\n",
      "Epoch: 2930/20000, Loss: 0.014216\n",
      "Epoch: 2940/20000, Loss: 0.014139\n",
      "Epoch: 2950/20000, Loss: 0.014062\n",
      "Epoch: 2960/20000, Loss: 0.013986\n",
      "Epoch: 2970/20000, Loss: 0.013910\n",
      "Epoch: 2980/20000, Loss: 0.013835\n",
      "Epoch: 2990/20000, Loss: 0.013760\n",
      "Epoch: 3000/20000, Loss: 0.013686\n",
      "Epoch: 3010/20000, Loss: 0.013612\n",
      "Epoch: 3020/20000, Loss: 0.013539\n",
      "Epoch: 3030/20000, Loss: 0.013466\n",
      "Epoch: 3040/20000, Loss: 0.013393\n",
      "Epoch: 3050/20000, Loss: 0.013321\n",
      "Epoch: 3060/20000, Loss: 0.013249\n",
      "Epoch: 3070/20000, Loss: 0.013178\n",
      "Epoch: 3080/20000, Loss: 0.013107\n",
      "Epoch: 3090/20000, Loss: 0.013037\n",
      "Epoch: 3100/20000, Loss: 0.012967\n",
      "Epoch: 3110/20000, Loss: 0.012897\n",
      "Epoch: 3120/20000, Loss: 0.012828\n",
      "Epoch: 3130/20000, Loss: 0.012759\n",
      "Epoch: 3140/20000, Loss: 0.012691\n",
      "Epoch: 3150/20000, Loss: 0.012623\n",
      "Epoch: 3160/20000, Loss: 0.012555\n",
      "Epoch: 3170/20000, Loss: 0.012488\n",
      "Epoch: 3180/20000, Loss: 0.012421\n",
      "Epoch: 3190/20000, Loss: 0.012356\n",
      "Epoch: 3200/20000, Loss: 0.012289\n",
      "Epoch: 3210/20000, Loss: 0.012223\n",
      "Epoch: 3220/20000, Loss: 0.012158\n",
      "Epoch: 3230/20000, Loss: 0.012093\n",
      "Epoch: 3240/20000, Loss: 0.012028\n",
      "Epoch: 3250/20000, Loss: 0.011964\n",
      "Epoch: 3260/20000, Loss: 0.011900\n",
      "Epoch: 3270/20000, Loss: 0.011837\n",
      "Epoch: 3280/20000, Loss: 0.011774\n",
      "Epoch: 3290/20000, Loss: 0.011711\n",
      "Epoch: 3300/20000, Loss: 0.011648\n",
      "Epoch: 3310/20000, Loss: 0.011586\n",
      "Epoch: 3320/20000, Loss: 0.011525\n",
      "Epoch: 3330/20000, Loss: 0.011463\n",
      "Epoch: 3340/20000, Loss: 0.011402\n",
      "Epoch: 3350/20000, Loss: 0.011341\n",
      "Epoch: 3360/20000, Loss: 0.011281\n",
      "Epoch: 3370/20000, Loss: 0.011221\n",
      "Epoch: 3380/20000, Loss: 0.011161\n",
      "Epoch: 3390/20000, Loss: 0.011102\n",
      "Epoch: 3400/20000, Loss: 0.011042\n",
      "Epoch: 3410/20000, Loss: 0.010984\n",
      "Epoch: 3420/20000, Loss: 0.010925\n",
      "Epoch: 3430/20000, Loss: 0.010867\n",
      "Epoch: 3440/20000, Loss: 0.010809\n",
      "Epoch: 3450/20000, Loss: 0.010750\n",
      "Epoch: 3460/20000, Loss: 0.010689\n",
      "Epoch: 3470/20000, Loss: 0.010608\n",
      "Epoch: 3480/20000, Loss: 0.010215\n",
      "Epoch: 3490/20000, Loss: 0.009965\n",
      "Epoch: 3500/20000, Loss: 0.009729\n",
      "Epoch: 3510/20000, Loss: 0.009500\n",
      "Epoch: 3520/20000, Loss: 0.009285\n",
      "Epoch: 3530/20000, Loss: 0.009087\n",
      "Epoch: 3540/20000, Loss: 0.008906\n",
      "Epoch: 3550/20000, Loss: 0.008739\n",
      "Epoch: 3560/20000, Loss: 0.008584\n",
      "Epoch: 3570/20000, Loss: 0.008439\n",
      "Epoch: 3580/20000, Loss: 0.008302\n",
      "Epoch: 3590/20000, Loss: 0.008172\n",
      "Epoch: 3600/20000, Loss: 0.008048\n",
      "Epoch: 3610/20000, Loss: 0.007929\n",
      "Epoch: 3620/20000, Loss: 0.007816\n",
      "Epoch: 3630/20000, Loss: 0.007704\n",
      "Epoch: 3640/20000, Loss: 0.007596\n",
      "Epoch: 3650/20000, Loss: 0.007492\n",
      "Epoch: 3660/20000, Loss: 0.007391\n",
      "Epoch: 3670/20000, Loss: 0.007293\n",
      "Epoch: 3680/20000, Loss: 0.007197\n",
      "Epoch: 3690/20000, Loss: 0.007104\n",
      "Epoch: 3700/20000, Loss: 0.007013\n",
      "Epoch: 3710/20000, Loss: 0.006924\n",
      "Epoch: 3720/20000, Loss: 0.006837\n",
      "Epoch: 3730/20000, Loss: 0.006751\n",
      "Epoch: 3740/20000, Loss: 0.006668\n",
      "Epoch: 3750/20000, Loss: 0.006586\n",
      "Epoch: 3760/20000, Loss: 0.006505\n",
      "Epoch: 3770/20000, Loss: 0.006429\n",
      "Epoch: 3780/20000, Loss: 0.006349\n",
      "Epoch: 3790/20000, Loss: 0.006273\n",
      "Epoch: 3800/20000, Loss: 0.006198\n",
      "Epoch: 3810/20000, Loss: 0.006125\n",
      "Epoch: 3820/20000, Loss: 0.006053\n",
      "Epoch: 3830/20000, Loss: 0.005982\n",
      "Epoch: 3840/20000, Loss: 0.005913\n",
      "Epoch: 3850/20000, Loss: 0.005845\n",
      "Epoch: 3860/20000, Loss: 0.005777\n",
      "Epoch: 3870/20000, Loss: 0.005711\n",
      "Epoch: 3880/20000, Loss: 0.005646\n",
      "Epoch: 3890/20000, Loss: 0.005583\n",
      "Epoch: 3900/20000, Loss: 0.005520\n",
      "Epoch: 3910/20000, Loss: 0.005458\n",
      "Epoch: 3920/20000, Loss: 0.005397\n",
      "Epoch: 3930/20000, Loss: 0.005338\n",
      "Epoch: 3940/20000, Loss: 0.005279\n",
      "Epoch: 3950/20000, Loss: 0.005221\n",
      "Epoch: 3960/20000, Loss: 0.005163\n",
      "Epoch: 3970/20000, Loss: 0.005107\n",
      "Epoch: 3980/20000, Loss: 0.005052\n",
      "Epoch: 3990/20000, Loss: 0.004997\n",
      "Epoch: 4000/20000, Loss: 0.004944\n",
      "Epoch: 4010/20000, Loss: 0.004891\n",
      "Epoch: 4020/20000, Loss: 0.004839\n",
      "Epoch: 4030/20000, Loss: 0.004788\n",
      "Epoch: 4040/20000, Loss: 0.004737\n",
      "Epoch: 4050/20000, Loss: 0.004687\n",
      "Epoch: 4060/20000, Loss: 0.004638\n",
      "Epoch: 4070/20000, Loss: 0.004590\n",
      "Epoch: 4080/20000, Loss: 0.004542\n",
      "Epoch: 4090/20000, Loss: 0.004495\n",
      "Epoch: 4100/20000, Loss: 0.004448\n",
      "Epoch: 4110/20000, Loss: 0.004403\n",
      "Epoch: 4120/20000, Loss: 0.004357\n",
      "Epoch: 4130/20000, Loss: 0.004313\n",
      "Epoch: 4140/20000, Loss: 0.004270\n",
      "Epoch: 4150/20000, Loss: 0.004225\n",
      "Epoch: 4160/20000, Loss: 0.004182\n",
      "Epoch: 4170/20000, Loss: 0.004140\n",
      "Epoch: 4180/20000, Loss: 0.004098\n",
      "Epoch: 4190/20000, Loss: 0.004056\n",
      "Epoch: 4200/20000, Loss: 0.004015\n",
      "Epoch: 4210/20000, Loss: 0.003975\n",
      "Epoch: 4220/20000, Loss: 0.003935\n",
      "Epoch: 4230/20000, Loss: 0.003886\n",
      "Epoch: 4240/20000, Loss: 0.003668\n",
      "Epoch: 4250/20000, Loss: 0.003567\n",
      "Epoch: 4260/20000, Loss: 0.003469\n",
      "Epoch: 4270/20000, Loss: 0.003379\n",
      "Epoch: 4280/20000, Loss: 0.003296\n",
      "Epoch: 4290/20000, Loss: 0.003216\n",
      "Epoch: 4300/20000, Loss: 0.003139\n",
      "Epoch: 4310/20000, Loss: 0.003064\n",
      "Epoch: 4320/20000, Loss: 0.002992\n",
      "Epoch: 4330/20000, Loss: 0.002922\n",
      "Epoch: 4340/20000, Loss: 0.002855\n",
      "Epoch: 4350/20000, Loss: 0.002791\n",
      "Epoch: 4360/20000, Loss: 0.002732\n",
      "Epoch: 4370/20000, Loss: 0.002673\n",
      "Epoch: 4380/20000, Loss: 0.002617\n",
      "Epoch: 4390/20000, Loss: 0.002563\n",
      "Epoch: 4400/20000, Loss: 0.002511\n",
      "Epoch: 4410/20000, Loss: 0.002462\n",
      "Epoch: 4420/20000, Loss: 0.002414\n",
      "Epoch: 4430/20000, Loss: 0.002368\n",
      "Epoch: 4440/20000, Loss: 0.002323\n",
      "Epoch: 4450/20000, Loss: 0.002280\n",
      "Epoch: 4460/20000, Loss: 0.002238\n",
      "Epoch: 4470/20000, Loss: 0.002197\n",
      "Epoch: 4480/20000, Loss: 0.002158\n",
      "Epoch: 4490/20000, Loss: 0.002122\n",
      "Epoch: 4500/20000, Loss: 0.002083\n",
      "Epoch: 4510/20000, Loss: 0.002047\n",
      "Epoch: 4520/20000, Loss: 0.002012\n",
      "Epoch: 4530/20000, Loss: 0.001977\n",
      "Epoch: 4540/20000, Loss: 0.001944\n",
      "Epoch: 4550/20000, Loss: 0.001910\n",
      "Epoch: 4560/20000, Loss: 0.001854\n",
      "Epoch: 4570/20000, Loss: 0.001794\n",
      "Epoch: 4580/20000, Loss: 0.001748\n",
      "Epoch: 4590/20000, Loss: 0.001707\n",
      "Epoch: 4600/20000, Loss: 0.001666\n",
      "Epoch: 4610/20000, Loss: 0.001628\n",
      "Epoch: 4620/20000, Loss: 0.001592\n",
      "Epoch: 4630/20000, Loss: 0.001555\n",
      "Epoch: 4640/20000, Loss: 0.001520\n",
      "Epoch: 4650/20000, Loss: 0.001485\n",
      "Epoch: 4660/20000, Loss: 0.001451\n",
      "Epoch: 4670/20000, Loss: 0.001417\n",
      "Epoch: 4680/20000, Loss: 0.001384\n",
      "Epoch: 4690/20000, Loss: 0.001351\n",
      "Epoch: 4700/20000, Loss: 0.001319\n",
      "Epoch: 4710/20000, Loss: 0.001288\n",
      "Epoch: 4720/20000, Loss: 0.001257\n",
      "Epoch: 4730/20000, Loss: 0.001226\n",
      "Epoch: 4740/20000, Loss: 0.001196\n",
      "Epoch: 4750/20000, Loss: 0.001167\n",
      "Epoch: 4760/20000, Loss: 0.001142\n",
      "Epoch: 4770/20000, Loss: 0.001111\n",
      "Epoch: 4780/20000, Loss: 0.001083\n",
      "Epoch: 4790/20000, Loss: 0.001056\n",
      "Epoch: 4800/20000, Loss: 0.001030\n",
      "Epoch: 4810/20000, Loss: 0.001005\n",
      "Epoch: 4820/20000, Loss: 0.000980\n",
      "Epoch: 4830/20000, Loss: 0.000957\n",
      "Epoch: 4840/20000, Loss: 0.000934\n",
      "Epoch: 4850/20000, Loss: 0.000912\n",
      "Epoch: 4860/20000, Loss: 0.000890\n",
      "Epoch: 4870/20000, Loss: 0.000870\n",
      "Epoch: 4880/20000, Loss: 0.000850\n",
      "Epoch: 4890/20000, Loss: 0.000831\n",
      "Epoch: 4900/20000, Loss: 0.000812\n",
      "Epoch: 4910/20000, Loss: 0.000794\n",
      "Epoch: 4920/20000, Loss: 0.000777\n",
      "Epoch: 4930/20000, Loss: 0.000760\n",
      "Epoch: 4940/20000, Loss: 0.000744\n",
      "Epoch: 4950/20000, Loss: 0.000732\n",
      "Epoch: 4960/20000, Loss: 0.000714\n",
      "Epoch: 4970/20000, Loss: 0.000700\n",
      "Epoch: 4980/20000, Loss: 0.000685\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 4990/20000, Loss: 0.000672\n",
      "Epoch: 5000/20000, Loss: 0.000658\n",
      "Epoch: 5010/20000, Loss: 0.000646\n",
      "Epoch: 5020/20000, Loss: 0.000633\n",
      "Epoch: 5030/20000, Loss: 0.000621\n",
      "Epoch: 5040/20000, Loss: 0.000610\n",
      "Epoch: 5050/20000, Loss: 0.000598\n",
      "Epoch: 5060/20000, Loss: 0.000587\n",
      "Epoch: 5070/20000, Loss: 0.000577\n",
      "Epoch: 5080/20000, Loss: 0.000566\n",
      "Epoch: 5090/20000, Loss: 0.000556\n",
      "Epoch: 5100/20000, Loss: 0.000546\n",
      "Epoch: 5110/20000, Loss: 0.000537\n",
      "Epoch: 5120/20000, Loss: 0.000527\n",
      "Epoch: 5130/20000, Loss: 0.000518\n",
      "Epoch: 5140/20000, Loss: 0.000509\n",
      "Epoch: 5150/20000, Loss: 0.000501\n",
      "Epoch: 5160/20000, Loss: 0.000492\n",
      "Epoch: 5170/20000, Loss: 0.000484\n",
      "Epoch: 5180/20000, Loss: 0.000477\n",
      "Epoch: 5190/20000, Loss: 0.000471\n",
      "Epoch: 5200/20000, Loss: 0.000461\n",
      "Epoch: 5210/20000, Loss: 0.000453\n",
      "Epoch: 5220/20000, Loss: 0.000446\n",
      "Epoch: 5230/20000, Loss: 0.000439\n",
      "Epoch: 5240/20000, Loss: 0.000432\n",
      "Epoch: 5250/20000, Loss: 0.000425\n",
      "Epoch: 5260/20000, Loss: 0.000418\n",
      "Epoch: 5270/20000, Loss: 0.000412\n",
      "Epoch: 5280/20000, Loss: 0.000406\n",
      "Epoch: 5290/20000, Loss: 0.000399\n",
      "Epoch: 5300/20000, Loss: 0.000393\n",
      "Epoch: 5310/20000, Loss: 0.000387\n",
      "Epoch: 5320/20000, Loss: 0.000381\n",
      "Epoch: 5330/20000, Loss: 0.000376\n",
      "Epoch: 5340/20000, Loss: 0.000370\n",
      "Epoch: 5350/20000, Loss: 0.000365\n",
      "Epoch: 5360/20000, Loss: 0.000359\n",
      "Epoch: 5370/20000, Loss: 0.000354\n",
      "Epoch: 5380/20000, Loss: 0.000349\n",
      "Epoch: 5390/20000, Loss: 0.000344\n",
      "Epoch: 5400/20000, Loss: 0.000339\n",
      "Epoch: 5410/20000, Loss: 0.000334\n",
      "Epoch: 5420/20000, Loss: 0.000333\n",
      "Epoch: 5430/20000, Loss: 0.000326\n",
      "Epoch: 5440/20000, Loss: 0.000320\n",
      "Epoch: 5450/20000, Loss: 0.000316\n",
      "Epoch: 5460/20000, Loss: 0.000311\n",
      "Epoch: 5470/20000, Loss: 0.000307\n",
      "Epoch: 5480/20000, Loss: 0.000303\n",
      "Epoch: 5490/20000, Loss: 0.000298\n",
      "Epoch: 5500/20000, Loss: 0.000294\n",
      "Epoch: 5510/20000, Loss: 0.000290\n",
      "Epoch: 5520/20000, Loss: 0.000286\n",
      "Epoch: 5530/20000, Loss: 0.000282\n",
      "Epoch: 5540/20000, Loss: 0.000279\n",
      "Epoch: 5550/20000, Loss: 0.000275\n",
      "Epoch: 5560/20000, Loss: 0.000271\n",
      "Epoch: 5570/20000, Loss: 0.000268\n",
      "Epoch: 5580/20000, Loss: 0.000264\n",
      "Epoch: 5590/20000, Loss: 0.000261\n",
      "Epoch: 5600/20000, Loss: 0.000257\n",
      "Epoch: 5610/20000, Loss: 0.000254\n",
      "Epoch: 5620/20000, Loss: 0.000251\n",
      "Epoch: 5630/20000, Loss: 0.000247\n",
      "Epoch: 5640/20000, Loss: 0.000244\n",
      "Epoch: 5650/20000, Loss: 0.000243\n",
      "Epoch: 5660/20000, Loss: 0.000241\n",
      "Epoch: 5670/20000, Loss: 0.000236\n",
      "Epoch: 5680/20000, Loss: 0.000232\n",
      "Epoch: 5690/20000, Loss: 0.000229\n",
      "Epoch: 5700/20000, Loss: 0.000226\n",
      "Epoch: 5710/20000, Loss: 0.000223\n",
      "Epoch: 5720/20000, Loss: 0.000221\n",
      "Epoch: 5730/20000, Loss: 0.000218\n",
      "Epoch: 5740/20000, Loss: 0.000215\n",
      "Epoch: 5750/20000, Loss: 0.000213\n",
      "Epoch: 5760/20000, Loss: 0.000210\n",
      "Epoch: 5770/20000, Loss: 0.000207\n",
      "Epoch: 5780/20000, Loss: 0.000205\n",
      "Epoch: 5790/20000, Loss: 0.000203\n",
      "Epoch: 5800/20000, Loss: 0.000200\n",
      "Epoch: 5810/20000, Loss: 0.000198\n",
      "Epoch: 5820/20000, Loss: 0.000195\n",
      "Epoch: 5830/20000, Loss: 0.000193\n",
      "Epoch: 5840/20000, Loss: 0.000191\n",
      "Epoch: 5850/20000, Loss: 0.000189\n",
      "Epoch: 5860/20000, Loss: 0.000186\n",
      "Epoch: 5870/20000, Loss: 0.000184\n",
      "Epoch: 5880/20000, Loss: 0.000182\n",
      "Epoch: 5890/20000, Loss: 0.000180\n",
      "Epoch: 5900/20000, Loss: 0.000178\n",
      "Epoch: 5910/20000, Loss: 0.000178\n",
      "Epoch: 5920/20000, Loss: 0.000177\n",
      "Epoch: 5930/20000, Loss: 0.000173\n",
      "Epoch: 5940/20000, Loss: 0.000170\n",
      "Epoch: 5950/20000, Loss: 0.000168\n",
      "Epoch: 5960/20000, Loss: 0.000166\n",
      "Epoch: 5970/20000, Loss: 0.000164\n",
      "Epoch: 5980/20000, Loss: 0.000162\n",
      "Epoch: 5990/20000, Loss: 0.000161\n",
      "Epoch: 6000/20000, Loss: 0.000159\n",
      "Epoch: 6010/20000, Loss: 0.000157\n",
      "Epoch: 6020/20000, Loss: 0.000155\n",
      "Epoch: 6030/20000, Loss: 0.000154\n",
      "Epoch: 6040/20000, Loss: 0.000152\n",
      "Epoch: 6050/20000, Loss: 0.000150\n",
      "Epoch: 6060/20000, Loss: 0.000149\n",
      "Epoch: 6070/20000, Loss: 0.000147\n",
      "Epoch: 6080/20000, Loss: 0.000146\n",
      "Epoch: 6090/20000, Loss: 0.000144\n",
      "Epoch: 6100/20000, Loss: 0.000143\n",
      "Epoch: 6110/20000, Loss: 0.000141\n",
      "Epoch: 6120/20000, Loss: 0.000140\n",
      "Epoch: 6130/20000, Loss: 0.000138\n",
      "Epoch: 6140/20000, Loss: 0.000138\n",
      "Epoch: 6150/20000, Loss: 0.000138\n",
      "Epoch: 6160/20000, Loss: 0.000135\n",
      "Epoch: 6170/20000, Loss: 0.000133\n",
      "Epoch: 6180/20000, Loss: 0.000131\n",
      "Epoch: 6190/20000, Loss: 0.000130\n",
      "Epoch: 6200/20000, Loss: 0.000129\n",
      "Epoch: 6210/20000, Loss: 0.000127\n",
      "Epoch: 6220/20000, Loss: 0.000126\n",
      "Epoch: 6230/20000, Loss: 0.000125\n",
      "Epoch: 6240/20000, Loss: 0.000124\n",
      "Epoch: 6250/20000, Loss: 0.000122\n",
      "Epoch: 6260/20000, Loss: 0.000121\n",
      "Epoch: 6270/20000, Loss: 0.000120\n",
      "Epoch: 6280/20000, Loss: 0.000119\n",
      "Epoch: 6290/20000, Loss: 0.000118\n",
      "Epoch: 6300/20000, Loss: 0.000116\n",
      "Epoch: 6310/20000, Loss: 0.000115\n",
      "Epoch: 6320/20000, Loss: 0.000114\n",
      "Epoch: 6330/20000, Loss: 0.000113\n",
      "Epoch: 6340/20000, Loss: 0.000112\n",
      "Epoch: 6350/20000, Loss: 0.000111\n",
      "Epoch: 6360/20000, Loss: 0.000110\n",
      "Epoch: 6370/20000, Loss: 0.000109\n",
      "Epoch: 6380/20000, Loss: 0.000108\n",
      "Epoch: 6390/20000, Loss: 0.000107\n",
      "Epoch: 6400/20000, Loss: 0.000106\n",
      "Epoch: 6410/20000, Loss: 0.000105\n",
      "Epoch: 6420/20000, Loss: 0.000104\n",
      "Epoch: 6430/20000, Loss: 0.000103\n",
      "Epoch: 6440/20000, Loss: 0.000102\n",
      "Epoch: 6450/20000, Loss: 0.000101\n",
      "Epoch: 6460/20000, Loss: 0.000100\n",
      "Epoch: 6470/20000, Loss: 0.000099\n",
      "Epoch: 6480/20000, Loss: 0.000098\n",
      "Epoch: 6490/20000, Loss: 0.000097\n",
      "Epoch: 6500/20000, Loss: 0.000097\n",
      "Epoch: 6510/20000, Loss: 0.000096\n",
      "Epoch: 6520/20000, Loss: 0.000095\n",
      "Epoch: 6530/20000, Loss: 0.000094\n",
      "Epoch: 6540/20000, Loss: 0.000093\n",
      "Epoch: 6550/20000, Loss: 0.000092\n",
      "Epoch: 6560/20000, Loss: 0.000092\n",
      "Epoch: 6570/20000, Loss: 0.000091\n",
      "Epoch: 6580/20000, Loss: 0.000090\n",
      "Epoch: 6590/20000, Loss: 0.000089\n",
      "Epoch: 6600/20000, Loss: 0.000088\n",
      "Epoch: 6610/20000, Loss: 0.000088\n",
      "Epoch: 6620/20000, Loss: 0.000087\n",
      "Epoch: 6630/20000, Loss: 0.000087\n",
      "Epoch: 6640/20000, Loss: 0.000085\n",
      "Epoch: 6650/20000, Loss: 0.000085\n",
      "Epoch: 6660/20000, Loss: 0.000084\n",
      "Epoch: 6670/20000, Loss: 0.000083\n",
      "Epoch: 6680/20000, Loss: 0.000082\n",
      "Epoch: 6690/20000, Loss: 0.000082\n",
      "Epoch: 6700/20000, Loss: 0.000081\n",
      "Epoch: 6710/20000, Loss: 0.000080\n",
      "Epoch: 6720/20000, Loss: 0.000080\n",
      "Epoch: 6730/20000, Loss: 0.000079\n",
      "Epoch: 6740/20000, Loss: 0.000078\n",
      "Epoch: 6750/20000, Loss: 0.000078\n",
      "Epoch: 6760/20000, Loss: 0.000077\n",
      "Epoch: 6770/20000, Loss: 0.000076\n",
      "Epoch: 6780/20000, Loss: 0.000076\n",
      "Epoch: 6790/20000, Loss: 0.000075\n",
      "Epoch: 6800/20000, Loss: 0.000074\n",
      "Epoch: 6810/20000, Loss: 0.000074\n",
      "Epoch: 6820/20000, Loss: 0.000073\n",
      "Epoch: 6830/20000, Loss: 0.000073\n",
      "Epoch: 6840/20000, Loss: 0.000072\n",
      "Epoch: 6850/20000, Loss: 0.000071\n",
      "Epoch: 6860/20000, Loss: 0.000071\n",
      "Epoch: 6870/20000, Loss: 0.000070\n",
      "Epoch: 6880/20000, Loss: 0.000070\n",
      "Epoch: 6890/20000, Loss: 0.000069\n",
      "Epoch: 6900/20000, Loss: 0.000069\n",
      "Epoch: 6910/20000, Loss: 0.000068\n",
      "Epoch: 6920/20000, Loss: 0.000071\n",
      "Epoch: 6930/20000, Loss: 0.000070\n",
      "Epoch: 6940/20000, Loss: 0.000067\n",
      "Epoch: 6950/20000, Loss: 0.000066\n",
      "Epoch: 6960/20000, Loss: 0.000065\n",
      "Epoch: 6970/20000, Loss: 0.000065\n",
      "Epoch: 6980/20000, Loss: 0.000064\n",
      "Epoch: 6990/20000, Loss: 0.000064\n",
      "Epoch: 7000/20000, Loss: 0.000063\n",
      "Epoch: 7010/20000, Loss: 0.000063\n",
      "Epoch: 7020/20000, Loss: 0.000062\n",
      "Epoch: 7030/20000, Loss: 0.000062\n",
      "Epoch: 7040/20000, Loss: 0.000061\n",
      "Epoch: 7050/20000, Loss: 0.000061\n",
      "Epoch: 7060/20000, Loss: 0.000060\n",
      "Epoch: 7070/20000, Loss: 0.000060\n",
      "Epoch: 7080/20000, Loss: 0.000059\n",
      "Epoch: 7090/20000, Loss: 0.000059\n",
      "Epoch: 7100/20000, Loss: 0.000058\n",
      "Epoch: 7110/20000, Loss: 0.000058\n",
      "Epoch: 7120/20000, Loss: 0.000057\n",
      "Epoch: 7130/20000, Loss: 0.000057\n",
      "Epoch: 7140/20000, Loss: 0.000056\n",
      "Epoch: 7150/20000, Loss: 0.000056\n",
      "Epoch: 7160/20000, Loss: 0.000055\n",
      "Epoch: 7170/20000, Loss: 0.000055\n",
      "Epoch: 7180/20000, Loss: 0.000064\n",
      "Epoch: 7190/20000, Loss: 0.000055\n",
      "Epoch: 7200/20000, Loss: 0.000054\n",
      "Epoch: 7210/20000, Loss: 0.000054\n",
      "Epoch: 7220/20000, Loss: 0.000053\n",
      "Epoch: 7230/20000, Loss: 0.000053\n",
      "Epoch: 7240/20000, Loss: 0.000052\n",
      "Epoch: 7250/20000, Loss: 0.000052\n",
      "Epoch: 7260/20000, Loss: 0.000051\n",
      "Epoch: 7270/20000, Loss: 0.000051\n",
      "Epoch: 7280/20000, Loss: 0.000050\n",
      "Epoch: 7290/20000, Loss: 0.000050\n",
      "Epoch: 7300/20000, Loss: 0.000050\n",
      "Epoch: 7310/20000, Loss: 0.000049\n",
      "Epoch: 7320/20000, Loss: 0.000049\n",
      "Epoch: 7330/20000, Loss: 0.000048\n",
      "Epoch: 7340/20000, Loss: 0.000048\n",
      "Epoch: 7350/20000, Loss: 0.000048\n",
      "Epoch: 7360/20000, Loss: 0.000047\n",
      "Epoch: 7370/20000, Loss: 0.000047\n",
      "Epoch: 7380/20000, Loss: 0.000047\n",
      "Epoch: 7390/20000, Loss: 0.000046\n",
      "Epoch: 7400/20000, Loss: 0.000046\n",
      "Epoch: 7410/20000, Loss: 0.000046\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 7420/20000, Loss: 0.000045\n",
      "Epoch: 7430/20000, Loss: 0.000045\n",
      "Epoch: 7440/20000, Loss: 0.000044\n",
      "Epoch: 7450/20000, Loss: 0.000045\n",
      "Epoch: 7460/20000, Loss: 0.000044\n",
      "Epoch: 7470/20000, Loss: 0.000043\n",
      "Epoch: 7480/20000, Loss: 0.000043\n",
      "Epoch: 7490/20000, Loss: 0.000043\n",
      "Epoch: 7500/20000, Loss: 0.000043\n",
      "Epoch: 7510/20000, Loss: 0.000042\n",
      "Epoch: 7520/20000, Loss: 0.000042\n",
      "Epoch: 7530/20000, Loss: 0.000041\n",
      "Epoch: 7540/20000, Loss: 0.000041\n",
      "Epoch: 7550/20000, Loss: 0.000041\n",
      "Epoch: 7560/20000, Loss: 0.000040\n",
      "Epoch: 7570/20000, Loss: 0.000040\n",
      "Epoch: 7580/20000, Loss: 0.000040\n",
      "Epoch: 7590/20000, Loss: 0.000040\n",
      "Epoch: 7600/20000, Loss: 0.000039\n",
      "Epoch: 7610/20000, Loss: 0.000039\n",
      "Epoch: 7620/20000, Loss: 0.000039\n",
      "Epoch: 7630/20000, Loss: 0.000038\n",
      "Epoch: 7640/20000, Loss: 0.000038\n",
      "Epoch: 7650/20000, Loss: 0.000038\n",
      "Epoch: 7660/20000, Loss: 0.000037\n",
      "Epoch: 7670/20000, Loss: 0.000037\n",
      "Epoch: 7680/20000, Loss: 0.000037\n",
      "Epoch: 7690/20000, Loss: 0.000037\n",
      "Epoch: 7700/20000, Loss: 0.000036\n",
      "Epoch: 7710/20000, Loss: 0.000044\n",
      "Epoch: 7720/20000, Loss: 0.000036\n",
      "Epoch: 7730/20000, Loss: 0.000036\n",
      "Epoch: 7740/20000, Loss: 0.000035\n",
      "Epoch: 7750/20000, Loss: 0.000035\n",
      "Epoch: 7760/20000, Loss: 0.000035\n",
      "Epoch: 7770/20000, Loss: 0.000034\n",
      "Epoch: 7780/20000, Loss: 0.000034\n",
      "Epoch: 7790/20000, Loss: 0.000034\n",
      "Epoch: 7800/20000, Loss: 0.000034\n",
      "Epoch: 7810/20000, Loss: 0.000033\n",
      "Epoch: 7820/20000, Loss: 0.000033\n",
      "Epoch: 7830/20000, Loss: 0.000033\n",
      "Epoch: 7840/20000, Loss: 0.000033\n",
      "Epoch: 7850/20000, Loss: 0.000032\n",
      "Epoch: 7860/20000, Loss: 0.000032\n",
      "Epoch: 7870/20000, Loss: 0.000032\n",
      "Epoch: 7880/20000, Loss: 0.000032\n",
      "Epoch: 7890/20000, Loss: 0.000031\n",
      "Epoch: 7900/20000, Loss: 0.000031\n",
      "Epoch: 7910/20000, Loss: 0.000031\n",
      "Epoch: 7920/20000, Loss: 0.000031\n",
      "Epoch: 7930/20000, Loss: 0.000031\n",
      "Epoch: 7940/20000, Loss: 0.000030\n",
      "Epoch: 7950/20000, Loss: 0.000031\n",
      "Epoch: 7960/20000, Loss: 0.000030\n",
      "Epoch: 7970/20000, Loss: 0.000030\n",
      "Epoch: 7980/20000, Loss: 0.000029\n",
      "Epoch: 7990/20000, Loss: 0.000029\n",
      "Epoch: 8000/20000, Loss: 0.000029\n",
      "Epoch: 8010/20000, Loss: 0.000029\n",
      "Epoch: 8020/20000, Loss: 0.000029\n",
      "Epoch: 8030/20000, Loss: 0.000028\n",
      "Epoch: 8040/20000, Loss: 0.000028\n",
      "Epoch: 8050/20000, Loss: 0.000028\n",
      "Epoch: 8060/20000, Loss: 0.000028\n",
      "Epoch: 8070/20000, Loss: 0.000028\n",
      "Epoch: 8080/20000, Loss: 0.000027\n",
      "Epoch: 8090/20000, Loss: 0.000027\n",
      "Epoch: 8100/20000, Loss: 0.000027\n",
      "Epoch: 8110/20000, Loss: 0.000027\n",
      "Epoch: 8120/20000, Loss: 0.000027\n",
      "Epoch: 8130/20000, Loss: 0.000026\n",
      "Epoch: 8140/20000, Loss: 0.000026\n",
      "Epoch: 8150/20000, Loss: 0.000026\n",
      "Epoch: 8160/20000, Loss: 0.000026\n",
      "Epoch: 8170/20000, Loss: 0.000026\n",
      "Epoch: 8180/20000, Loss: 0.000025\n",
      "Epoch: 8190/20000, Loss: 0.000025\n",
      "Epoch: 8200/20000, Loss: 0.000025\n",
      "Epoch: 8210/20000, Loss: 0.000025\n",
      "Epoch: 8220/20000, Loss: 0.000032\n",
      "Epoch: 8230/20000, Loss: 0.000025\n",
      "Epoch: 8240/20000, Loss: 0.000025\n",
      "Epoch: 8250/20000, Loss: 0.000024\n",
      "Epoch: 8260/20000, Loss: 0.000024\n",
      "Epoch: 8270/20000, Loss: 0.000024\n",
      "Epoch: 8280/20000, Loss: 0.000024\n",
      "Epoch: 8290/20000, Loss: 0.000023\n",
      "Epoch: 8300/20000, Loss: 0.000023\n",
      "Epoch: 8310/20000, Loss: 0.000023\n",
      "Epoch: 8320/20000, Loss: 0.000023\n",
      "Epoch: 8330/20000, Loss: 0.000023\n",
      "Epoch: 8340/20000, Loss: 0.000023\n",
      "Epoch: 8350/20000, Loss: 0.000023\n",
      "Epoch: 8360/20000, Loss: 0.000022\n",
      "Epoch: 8370/20000, Loss: 0.000022\n",
      "Epoch: 8380/20000, Loss: 0.000022\n",
      "Epoch: 8390/20000, Loss: 0.000022\n",
      "Epoch: 8400/20000, Loss: 0.000022\n",
      "Epoch: 8410/20000, Loss: 0.000022\n",
      "Epoch: 8420/20000, Loss: 0.000021\n",
      "Epoch: 8430/20000, Loss: 0.000021\n",
      "Epoch: 8440/20000, Loss: 0.000021\n",
      "Epoch: 8450/20000, Loss: 0.000021\n",
      "Epoch: 8460/20000, Loss: 0.000022\n",
      "Epoch: 8470/20000, Loss: 0.000024\n",
      "Epoch: 8480/20000, Loss: 0.000021\n",
      "Epoch: 8490/20000, Loss: 0.000021\n",
      "Epoch: 8500/20000, Loss: 0.000020\n",
      "Epoch: 8510/20000, Loss: 0.000020\n",
      "Epoch: 8520/20000, Loss: 0.000020\n",
      "Epoch: 8530/20000, Loss: 0.000020\n",
      "Epoch: 8540/20000, Loss: 0.000020\n",
      "Epoch: 8550/20000, Loss: 0.000020\n",
      "Epoch: 8560/20000, Loss: 0.000020\n",
      "Epoch: 8570/20000, Loss: 0.000019\n",
      "Epoch: 8580/20000, Loss: 0.000019\n",
      "Epoch: 8590/20000, Loss: 0.000019\n",
      "Epoch: 8600/20000, Loss: 0.000019\n",
      "Epoch: 8610/20000, Loss: 0.000019\n",
      "Epoch: 8620/20000, Loss: 0.000019\n",
      "Epoch: 8630/20000, Loss: 0.000019\n",
      "Epoch: 8640/20000, Loss: 0.000019\n",
      "Epoch: 8650/20000, Loss: 0.000018\n",
      "Epoch: 8660/20000, Loss: 0.000018\n",
      "Epoch: 8670/20000, Loss: 0.000018\n",
      "Epoch: 8680/20000, Loss: 0.000018\n",
      "Epoch: 8690/20000, Loss: 0.000018\n",
      "Epoch: 8700/20000, Loss: 0.000018\n",
      "Epoch: 8710/20000, Loss: 0.000018\n",
      "Epoch: 8720/20000, Loss: 0.000018\n",
      "Epoch: 8730/20000, Loss: 0.000027\n",
      "Epoch: 8740/20000, Loss: 0.000019\n",
      "Epoch: 8750/20000, Loss: 0.000018\n",
      "Epoch: 8760/20000, Loss: 0.000017\n",
      "Epoch: 8770/20000, Loss: 0.000017\n",
      "Epoch: 8780/20000, Loss: 0.000017\n",
      "Epoch: 8790/20000, Loss: 0.000017\n",
      "Epoch: 8800/20000, Loss: 0.000017\n",
      "Epoch: 8810/20000, Loss: 0.000017\n",
      "Epoch: 8820/20000, Loss: 0.000016\n",
      "Epoch: 8830/20000, Loss: 0.000016\n",
      "Epoch: 8840/20000, Loss: 0.000016\n",
      "Epoch: 8850/20000, Loss: 0.000016\n",
      "Epoch: 8860/20000, Loss: 0.000016\n",
      "Epoch: 8870/20000, Loss: 0.000016\n",
      "Epoch: 8880/20000, Loss: 0.000016\n",
      "Epoch: 8890/20000, Loss: 0.000016\n",
      "Epoch: 8900/20000, Loss: 0.000016\n",
      "Epoch: 8910/20000, Loss: 0.000016\n",
      "Epoch: 8920/20000, Loss: 0.000016\n",
      "Epoch: 8930/20000, Loss: 0.000015\n",
      "Epoch: 8940/20000, Loss: 0.000015\n",
      "Epoch: 8950/20000, Loss: 0.000015\n",
      "Epoch: 8960/20000, Loss: 0.000015\n",
      "Epoch: 8970/20000, Loss: 0.000015\n",
      "Epoch: 8980/20000, Loss: 0.000015\n",
      "Epoch: 8990/20000, Loss: 0.000016\n",
      "Epoch: 9000/20000, Loss: 0.000016\n",
      "Epoch: 9010/20000, Loss: 0.000015\n",
      "Epoch: 9020/20000, Loss: 0.000015\n",
      "Epoch: 9030/20000, Loss: 0.000015\n",
      "Epoch: 9040/20000, Loss: 0.000014\n",
      "Epoch: 9050/20000, Loss: 0.000014\n",
      "Epoch: 9060/20000, Loss: 0.000014\n",
      "Epoch: 9070/20000, Loss: 0.000014\n",
      "Epoch: 9080/20000, Loss: 0.000014\n",
      "Epoch: 9090/20000, Loss: 0.000014\n",
      "Epoch: 9100/20000, Loss: 0.000014\n",
      "Epoch: 9110/20000, Loss: 0.000014\n",
      "Epoch: 9120/20000, Loss: 0.000014\n",
      "Epoch: 9130/20000, Loss: 0.000014\n",
      "Epoch: 9140/20000, Loss: 0.000014\n",
      "Epoch: 9150/20000, Loss: 0.000014\n",
      "Epoch: 9160/20000, Loss: 0.000013\n",
      "Epoch: 9170/20000, Loss: 0.000013\n",
      "Epoch: 9180/20000, Loss: 0.000013\n",
      "Epoch: 9190/20000, Loss: 0.000013\n",
      "Epoch: 9200/20000, Loss: 0.000013\n",
      "Epoch: 9210/20000, Loss: 0.000013\n",
      "Epoch: 9220/20000, Loss: 0.000013\n",
      "Epoch: 9230/20000, Loss: 0.000013\n",
      "Epoch: 9240/20000, Loss: 0.000013\n",
      "Epoch: 9250/20000, Loss: 0.000013\n",
      "Epoch: 9260/20000, Loss: 0.000024\n",
      "Epoch: 9270/20000, Loss: 0.000013\n",
      "Epoch: 9280/20000, Loss: 0.000013\n",
      "Epoch: 9290/20000, Loss: 0.000013\n",
      "Epoch: 9300/20000, Loss: 0.000013\n",
      "Epoch: 9310/20000, Loss: 0.000012\n",
      "Epoch: 9320/20000, Loss: 0.000012\n",
      "Epoch: 9330/20000, Loss: 0.000012\n",
      "Epoch: 9340/20000, Loss: 0.000012\n",
      "Epoch: 9350/20000, Loss: 0.000012\n",
      "Epoch: 9360/20000, Loss: 0.000012\n",
      "Epoch: 9370/20000, Loss: 0.000012\n",
      "Epoch: 9380/20000, Loss: 0.000012\n",
      "Epoch: 9390/20000, Loss: 0.000012\n",
      "Epoch: 9400/20000, Loss: 0.000012\n",
      "Epoch: 9410/20000, Loss: 0.000012\n",
      "Epoch: 9420/20000, Loss: 0.000012\n",
      "Epoch: 9430/20000, Loss: 0.000012\n",
      "Epoch: 9440/20000, Loss: 0.000012\n",
      "Epoch: 9450/20000, Loss: 0.000011\n",
      "Epoch: 9460/20000, Loss: 0.000011\n",
      "Epoch: 9470/20000, Loss: 0.000011\n",
      "Epoch: 9480/20000, Loss: 0.000011\n",
      "Epoch: 9490/20000, Loss: 0.000011\n",
      "Epoch: 9500/20000, Loss: 0.000011\n",
      "Epoch: 9510/20000, Loss: 0.000011\n",
      "Epoch: 9520/20000, Loss: 0.000013\n",
      "Epoch: 9530/20000, Loss: 0.000013\n",
      "Epoch: 9540/20000, Loss: 0.000011\n",
      "Epoch: 9550/20000, Loss: 0.000011\n",
      "Epoch: 9560/20000, Loss: 0.000011\n",
      "Epoch: 9570/20000, Loss: 0.000011\n",
      "Epoch: 9580/20000, Loss: 0.000011\n",
      "Epoch: 9590/20000, Loss: 0.000011\n",
      "Epoch: 9600/20000, Loss: 0.000011\n",
      "Epoch: 9610/20000, Loss: 0.000011\n",
      "Epoch: 9620/20000, Loss: 0.000011\n",
      "Epoch: 9630/20000, Loss: 0.000010\n",
      "Epoch: 9640/20000, Loss: 0.000010\n",
      "Epoch: 9650/20000, Loss: 0.000010\n",
      "Epoch: 9660/20000, Loss: 0.000010\n",
      "Epoch: 9670/20000, Loss: 0.000010\n",
      "Epoch: 9680/20000, Loss: 0.000010\n",
      "Epoch: 9690/20000, Loss: 0.000010\n",
      "Epoch: 9700/20000, Loss: 0.000010\n",
      "Epoch: 9710/20000, Loss: 0.000010\n",
      "Epoch: 9720/20000, Loss: 0.000010\n",
      "Epoch: 9730/20000, Loss: 0.000010\n",
      "Epoch: 9740/20000, Loss: 0.000010\n",
      "Epoch: 9750/20000, Loss: 0.000010\n",
      "Epoch: 9760/20000, Loss: 0.000011\n",
      "Epoch: 9770/20000, Loss: 0.000011\n",
      "Epoch: 9780/20000, Loss: 0.000010\n",
      "Epoch: 9790/20000, Loss: 0.000010\n",
      "Epoch: 9800/20000, Loss: 0.000010\n",
      "Epoch: 9810/20000, Loss: 0.000010\n",
      "Epoch: 9820/20000, Loss: 0.000010\n",
      "Epoch: 9830/20000, Loss: 0.000010\n",
      "Epoch: 9840/20000, Loss: 0.000009\n",
      "Epoch: 9850/20000, Loss: 0.000009\n",
      "Epoch: 9860/20000, Loss: 0.000009\n",
      "Epoch: 9870/20000, Loss: 0.000009\n",
      "Epoch: 9880/20000, Loss: 0.000009\n",
      "Epoch: 9890/20000, Loss: 0.000009\n",
      "Epoch: 9900/20000, Loss: 0.000009\n",
      "Epoch: 9910/20000, Loss: 0.000009\n",
      "Epoch: 9920/20000, Loss: 0.000009\n",
      "Epoch: 9930/20000, Loss: 0.000009\n",
      "Epoch: 9940/20000, Loss: 0.000009\n",
      "Epoch: 9950/20000, Loss: 0.000009\n",
      "Epoch: 9960/20000, Loss: 0.000009\n",
      "Epoch: 9970/20000, Loss: 0.000009\n",
      "Epoch: 9980/20000, Loss: 0.000009\n",
      "Epoch: 9990/20000, Loss: 0.000009\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 10000/20000, Loss: 0.000009\n",
      "Epoch: 10010/20000, Loss: 0.000009\n",
      "Epoch: 10020/20000, Loss: 0.000013\n",
      "Epoch: 10030/20000, Loss: 0.000011\n",
      "Epoch: 10040/20000, Loss: 0.000009\n",
      "Epoch: 10050/20000, Loss: 0.000009\n",
      "Epoch: 10060/20000, Loss: 0.000009\n",
      "Epoch: 10070/20000, Loss: 0.000009\n",
      "Epoch: 10080/20000, Loss: 0.000008\n",
      "Epoch: 10090/20000, Loss: 0.000008\n",
      "Epoch: 10100/20000, Loss: 0.000008\n",
      "Epoch: 10110/20000, Loss: 0.000008\n",
      "Epoch: 10120/20000, Loss: 0.000008\n",
      "Epoch: 10130/20000, Loss: 0.000008\n",
      "Epoch: 10140/20000, Loss: 0.000008\n",
      "Epoch: 10150/20000, Loss: 0.000008\n",
      "Epoch: 10160/20000, Loss: 0.000008\n",
      "Epoch: 10170/20000, Loss: 0.000008\n",
      "Epoch: 10180/20000, Loss: 0.000008\n",
      "Epoch: 10190/20000, Loss: 0.000008\n",
      "Epoch: 10200/20000, Loss: 0.000008\n",
      "Epoch: 10210/20000, Loss: 0.000008\n",
      "Epoch: 10220/20000, Loss: 0.000008\n",
      "Epoch: 10230/20000, Loss: 0.000008\n",
      "Epoch: 10240/20000, Loss: 0.000008\n",
      "Epoch: 10250/20000, Loss: 0.000016\n",
      "Epoch: 10260/20000, Loss: 0.000009\n",
      "Epoch: 10270/20000, Loss: 0.000009\n",
      "Epoch: 10280/20000, Loss: 0.000008\n",
      "Epoch: 10290/20000, Loss: 0.000008\n",
      "Epoch: 10300/20000, Loss: 0.000008\n",
      "Epoch: 10310/20000, Loss: 0.000008\n",
      "Epoch: 10320/20000, Loss: 0.000008\n",
      "Epoch: 10330/20000, Loss: 0.000008\n",
      "Epoch: 10340/20000, Loss: 0.000008\n",
      "Epoch: 10350/20000, Loss: 0.000008\n",
      "Epoch: 10360/20000, Loss: 0.000008\n",
      "Epoch: 10370/20000, Loss: 0.000007\n",
      "Epoch: 10380/20000, Loss: 0.000007\n",
      "Epoch: 10390/20000, Loss: 0.000007\n",
      "Epoch: 10400/20000, Loss: 0.000007\n",
      "Epoch: 10410/20000, Loss: 0.000007\n",
      "Epoch: 10420/20000, Loss: 0.000007\n",
      "Epoch: 10430/20000, Loss: 0.000007\n",
      "Epoch: 10440/20000, Loss: 0.000007\n",
      "Epoch: 10450/20000, Loss: 0.000007\n",
      "Epoch: 10460/20000, Loss: 0.000007\n",
      "Epoch: 10470/20000, Loss: 0.000007\n",
      "Epoch: 10480/20000, Loss: 0.000008\n",
      "Epoch: 10490/20000, Loss: 0.000007\n",
      "Epoch: 10500/20000, Loss: 0.000008\n",
      "Epoch: 10510/20000, Loss: 0.000008\n",
      "Epoch: 10520/20000, Loss: 0.000007\n",
      "Epoch: 10530/20000, Loss: 0.000007\n",
      "Epoch: 10540/20000, Loss: 0.000007\n",
      "Epoch: 10550/20000, Loss: 0.000007\n",
      "Epoch: 10560/20000, Loss: 0.000007\n",
      "Epoch: 10570/20000, Loss: 0.000007\n",
      "Epoch: 10580/20000, Loss: 0.000007\n",
      "Epoch: 10590/20000, Loss: 0.000007\n",
      "Epoch: 10600/20000, Loss: 0.000007\n",
      "Epoch: 10610/20000, Loss: 0.000007\n",
      "Epoch: 10620/20000, Loss: 0.000007\n",
      "Epoch: 10630/20000, Loss: 0.000007\n",
      "Epoch: 10640/20000, Loss: 0.000007\n",
      "Epoch: 10650/20000, Loss: 0.000007\n",
      "Epoch: 10660/20000, Loss: 0.000007\n",
      "Epoch: 10670/20000, Loss: 0.000007\n",
      "Epoch: 10680/20000, Loss: 0.000007\n",
      "Epoch: 10690/20000, Loss: 0.000007\n",
      "Epoch: 10700/20000, Loss: 0.000007\n",
      "Epoch: 10710/20000, Loss: 0.000007\n",
      "Epoch: 10720/20000, Loss: 0.000013\n",
      "Epoch: 10730/20000, Loss: 0.000009\n",
      "Epoch: 10740/20000, Loss: 0.000008\n",
      "Epoch: 10750/20000, Loss: 0.000007\n",
      "Epoch: 10760/20000, Loss: 0.000006\n",
      "Epoch: 10770/20000, Loss: 0.000006\n",
      "Epoch: 10780/20000, Loss: 0.000006\n",
      "Epoch: 10790/20000, Loss: 0.000006\n",
      "Epoch: 10800/20000, Loss: 0.000006\n",
      "Epoch: 10810/20000, Loss: 0.000006\n",
      "Epoch: 10820/20000, Loss: 0.000006\n",
      "Epoch: 10830/20000, Loss: 0.000006\n",
      "Epoch: 10840/20000, Loss: 0.000006\n",
      "Epoch: 10850/20000, Loss: 0.000006\n",
      "Epoch: 10860/20000, Loss: 0.000006\n",
      "Epoch: 10870/20000, Loss: 0.000006\n",
      "Epoch: 10880/20000, Loss: 0.000006\n",
      "Epoch: 10890/20000, Loss: 0.000006\n",
      "Epoch: 10900/20000, Loss: 0.000006\n",
      "Epoch: 10910/20000, Loss: 0.000006\n",
      "Epoch: 10920/20000, Loss: 0.000006\n",
      "Epoch: 10930/20000, Loss: 0.000006\n",
      "Epoch: 10940/20000, Loss: 0.000006\n",
      "Epoch: 10950/20000, Loss: 0.000009\n",
      "Epoch: 10960/20000, Loss: 0.000012\n",
      "Epoch: 10970/20000, Loss: 0.000008\n",
      "Epoch: 10980/20000, Loss: 0.000007\n",
      "Epoch: 10990/20000, Loss: 0.000006\n",
      "Epoch: 11000/20000, Loss: 0.000006\n",
      "Epoch: 11010/20000, Loss: 0.000006\n",
      "Epoch: 11020/20000, Loss: 0.000006\n",
      "Epoch: 11030/20000, Loss: 0.000006\n",
      "Epoch: 11040/20000, Loss: 0.000006\n",
      "Epoch: 11050/20000, Loss: 0.000006\n",
      "Epoch: 11060/20000, Loss: 0.000006\n",
      "Epoch: 11070/20000, Loss: 0.000006\n",
      "Epoch: 11080/20000, Loss: 0.000006\n",
      "Epoch: 11090/20000, Loss: 0.000006\n",
      "Epoch: 11100/20000, Loss: 0.000006\n",
      "Epoch: 11110/20000, Loss: 0.000006\n",
      "Epoch: 11120/20000, Loss: 0.000006\n",
      "Epoch: 11130/20000, Loss: 0.000006\n",
      "Epoch: 11140/20000, Loss: 0.000006\n",
      "Epoch: 11150/20000, Loss: 0.000006\n",
      "Epoch: 11160/20000, Loss: 0.000006\n",
      "Epoch: 11170/20000, Loss: 0.000006\n",
      "Epoch: 11180/20000, Loss: 0.000006\n",
      "Epoch: 11190/20000, Loss: 0.000006\n",
      "Epoch: 11200/20000, Loss: 0.000005\n",
      "Epoch: 11210/20000, Loss: 0.000005\n",
      "Epoch: 11220/20000, Loss: 0.000006\n",
      "Epoch: 11230/20000, Loss: 0.000012\n",
      "Epoch: 11240/20000, Loss: 0.000009\n",
      "Epoch: 11250/20000, Loss: 0.000006\n",
      "Epoch: 11260/20000, Loss: 0.000005\n",
      "Epoch: 11270/20000, Loss: 0.000006\n",
      "Epoch: 11280/20000, Loss: 0.000005\n",
      "Epoch: 11290/20000, Loss: 0.000005\n",
      "Epoch: 11300/20000, Loss: 0.000005\n",
      "Epoch: 11310/20000, Loss: 0.000005\n",
      "Epoch: 11320/20000, Loss: 0.000005\n",
      "Epoch: 11330/20000, Loss: 0.000005\n",
      "Epoch: 11340/20000, Loss: 0.000005\n",
      "Epoch: 11350/20000, Loss: 0.000005\n",
      "Epoch: 11360/20000, Loss: 0.000005\n",
      "Epoch: 11370/20000, Loss: 0.000005\n",
      "Epoch: 11380/20000, Loss: 0.000005\n",
      "Epoch: 11390/20000, Loss: 0.000005\n",
      "Epoch: 11400/20000, Loss: 0.000005\n",
      "Epoch: 11410/20000, Loss: 0.000005\n",
      "Epoch: 11420/20000, Loss: 0.000005\n",
      "Epoch: 11430/20000, Loss: 0.000005\n",
      "Epoch: 11440/20000, Loss: 0.000009\n",
      "Epoch: 11450/20000, Loss: 0.000009\n",
      "Epoch: 11460/20000, Loss: 0.000005\n",
      "Epoch: 11470/20000, Loss: 0.000005\n",
      "Epoch: 11480/20000, Loss: 0.000005\n",
      "Epoch: 11490/20000, Loss: 0.000005\n",
      "Epoch: 11500/20000, Loss: 0.000005\n",
      "Epoch: 11510/20000, Loss: 0.000005\n",
      "Epoch: 11520/20000, Loss: 0.000005\n",
      "Epoch: 11530/20000, Loss: 0.000005\n",
      "Epoch: 11540/20000, Loss: 0.000005\n",
      "Epoch: 11550/20000, Loss: 0.000005\n",
      "Epoch: 11560/20000, Loss: 0.000005\n",
      "Epoch: 11570/20000, Loss: 0.000005\n",
      "Epoch: 11580/20000, Loss: 0.000005\n",
      "Epoch: 11590/20000, Loss: 0.000005\n",
      "Epoch: 11600/20000, Loss: 0.000005\n",
      "Epoch: 11610/20000, Loss: 0.000005\n",
      "Epoch: 11620/20000, Loss: 0.000005\n",
      "Epoch: 11630/20000, Loss: 0.000005\n",
      "Epoch: 11640/20000, Loss: 0.000005\n",
      "Epoch: 11650/20000, Loss: 0.000005\n",
      "Epoch: 11660/20000, Loss: 0.000005\n",
      "Epoch: 11670/20000, Loss: 0.000005\n",
      "Epoch: 11680/20000, Loss: 0.000009\n",
      "Epoch: 11690/20000, Loss: 0.000007\n",
      "Epoch: 11700/20000, Loss: 0.000006\n",
      "Epoch: 11710/20000, Loss: 0.000005\n",
      "Epoch: 11720/20000, Loss: 0.000005\n",
      "Epoch: 11730/20000, Loss: 0.000005\n",
      "Epoch: 11740/20000, Loss: 0.000005\n",
      "Epoch: 11750/20000, Loss: 0.000005\n",
      "Epoch: 11760/20000, Loss: 0.000005\n",
      "Epoch: 11770/20000, Loss: 0.000005\n",
      "Epoch: 11780/20000, Loss: 0.000005\n",
      "Epoch: 11790/20000, Loss: 0.000005\n",
      "Epoch: 11800/20000, Loss: 0.000005\n",
      "Epoch: 11810/20000, Loss: 0.000005\n",
      "Epoch: 11820/20000, Loss: 0.000005\n",
      "Epoch: 11830/20000, Loss: 0.000005\n",
      "Epoch: 11840/20000, Loss: 0.000005\n",
      "Epoch: 11850/20000, Loss: 0.000005\n",
      "Epoch: 11860/20000, Loss: 0.000005\n",
      "Epoch: 11870/20000, Loss: 0.000005\n",
      "Epoch: 11880/20000, Loss: 0.000005\n",
      "Epoch: 11890/20000, Loss: 0.000004\n",
      "Epoch: 11900/20000, Loss: 0.000004\n",
      "Epoch: 11910/20000, Loss: 0.000004\n",
      "Epoch: 11920/20000, Loss: 0.000007\n",
      "Epoch: 11930/20000, Loss: 0.000007\n",
      "Epoch: 11940/20000, Loss: 0.000004\n",
      "Epoch: 11950/20000, Loss: 0.000005\n",
      "Epoch: 11960/20000, Loss: 0.000005\n",
      "Epoch: 11970/20000, Loss: 0.000004\n",
      "Epoch: 11980/20000, Loss: 0.000004\n",
      "Epoch: 11990/20000, Loss: 0.000004\n",
      "Epoch: 12000/20000, Loss: 0.000004\n",
      "Epoch: 12010/20000, Loss: 0.000004\n",
      "Epoch: 12020/20000, Loss: 0.000004\n",
      "Epoch: 12030/20000, Loss: 0.000004\n",
      "Epoch: 12040/20000, Loss: 0.000004\n",
      "Epoch: 12050/20000, Loss: 0.000004\n",
      "Epoch: 12060/20000, Loss: 0.000004\n",
      "Epoch: 12070/20000, Loss: 0.000004\n",
      "Epoch: 12080/20000, Loss: 0.000004\n",
      "Epoch: 12090/20000, Loss: 0.000004\n",
      "Epoch: 12100/20000, Loss: 0.000004\n",
      "Epoch: 12110/20000, Loss: 0.000004\n",
      "Epoch: 12120/20000, Loss: 0.000004\n",
      "Epoch: 12130/20000, Loss: 0.000004\n",
      "Epoch: 12140/20000, Loss: 0.000004\n",
      "Epoch: 12150/20000, Loss: 0.000004\n",
      "Epoch: 12160/20000, Loss: 0.000005\n",
      "Epoch: 12170/20000, Loss: 0.000009\n",
      "Epoch: 12180/20000, Loss: 0.000006\n",
      "Epoch: 12190/20000, Loss: 0.000004\n",
      "Epoch: 12200/20000, Loss: 0.000004\n",
      "Epoch: 12210/20000, Loss: 0.000004\n",
      "Epoch: 12220/20000, Loss: 0.000004\n",
      "Epoch: 12230/20000, Loss: 0.000004\n",
      "Epoch: 12240/20000, Loss: 0.000004\n",
      "Epoch: 12250/20000, Loss: 0.000004\n",
      "Epoch: 12260/20000, Loss: 0.000004\n",
      "Epoch: 12270/20000, Loss: 0.000004\n",
      "Epoch: 12280/20000, Loss: 0.000004\n",
      "Epoch: 12290/20000, Loss: 0.000004\n",
      "Epoch: 12300/20000, Loss: 0.000004\n",
      "Epoch: 12310/20000, Loss: 0.000004\n",
      "Epoch: 12320/20000, Loss: 0.000004\n",
      "Epoch: 12330/20000, Loss: 0.000004\n",
      "Epoch: 12340/20000, Loss: 0.000004\n",
      "Epoch: 12350/20000, Loss: 0.000004\n",
      "Epoch: 12360/20000, Loss: 0.000004\n",
      "Epoch: 12370/20000, Loss: 0.000004\n",
      "Epoch: 12380/20000, Loss: 0.000004\n",
      "Epoch: 12390/20000, Loss: 0.000011\n",
      "Epoch: 12400/20000, Loss: 0.000005\n",
      "Epoch: 12410/20000, Loss: 0.000004\n",
      "Epoch: 12420/20000, Loss: 0.000004\n",
      "Epoch: 12430/20000, Loss: 0.000004\n",
      "Epoch: 12440/20000, Loss: 0.000004\n",
      "Epoch: 12450/20000, Loss: 0.000004\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 12460/20000, Loss: 0.000004\n",
      "Epoch: 12470/20000, Loss: 0.000004\n",
      "Epoch: 12480/20000, Loss: 0.000004\n",
      "Epoch: 12490/20000, Loss: 0.000004\n",
      "Epoch: 12500/20000, Loss: 0.000004\n",
      "Epoch: 12510/20000, Loss: 0.000004\n",
      "Epoch: 12520/20000, Loss: 0.000004\n",
      "Epoch: 12530/20000, Loss: 0.000004\n",
      "Epoch: 12540/20000, Loss: 0.000004\n",
      "Epoch: 12550/20000, Loss: 0.000004\n",
      "Epoch: 12560/20000, Loss: 0.000004\n",
      "Epoch: 12570/20000, Loss: 0.000004\n",
      "Epoch: 12580/20000, Loss: 0.000004\n",
      "Epoch: 12590/20000, Loss: 0.000004\n",
      "Epoch: 12600/20000, Loss: 0.000007\n",
      "Epoch: 12610/20000, Loss: 0.000008\n",
      "Epoch: 12620/20000, Loss: 0.000004\n",
      "Epoch: 12630/20000, Loss: 0.000004\n",
      "Epoch: 12640/20000, Loss: 0.000004\n",
      "Epoch: 12650/20000, Loss: 0.000004\n",
      "Epoch: 12660/20000, Loss: 0.000004\n",
      "Epoch: 12670/20000, Loss: 0.000004\n",
      "Epoch: 12680/20000, Loss: 0.000004\n",
      "Epoch: 12690/20000, Loss: 0.000004\n",
      "Epoch: 12700/20000, Loss: 0.000004\n",
      "Epoch: 12710/20000, Loss: 0.000004\n",
      "Epoch: 12720/20000, Loss: 0.000004\n",
      "Epoch: 12730/20000, Loss: 0.000004\n",
      "Epoch: 12740/20000, Loss: 0.000004\n",
      "Epoch: 12750/20000, Loss: 0.000004\n",
      "Epoch: 12760/20000, Loss: 0.000004\n",
      "Epoch: 12770/20000, Loss: 0.000004\n",
      "Epoch: 12780/20000, Loss: 0.000004\n",
      "Epoch: 12790/20000, Loss: 0.000004\n",
      "Epoch: 12800/20000, Loss: 0.000004\n",
      "Epoch: 12810/20000, Loss: 0.000004\n",
      "Epoch: 12820/20000, Loss: 0.000004\n",
      "Epoch: 12830/20000, Loss: 0.000004\n",
      "Epoch: 12840/20000, Loss: 0.000015\n",
      "Epoch: 12850/20000, Loss: 0.000004\n",
      "Epoch: 12860/20000, Loss: 0.000004\n",
      "Epoch: 12870/20000, Loss: 0.000004\n",
      "Epoch: 12880/20000, Loss: 0.000004\n",
      "Epoch: 12890/20000, Loss: 0.000004\n",
      "Epoch: 12900/20000, Loss: 0.000004\n",
      "Epoch: 12910/20000, Loss: 0.000004\n",
      "Epoch: 12920/20000, Loss: 0.000004\n",
      "Epoch: 12930/20000, Loss: 0.000004\n",
      "Epoch: 12940/20000, Loss: 0.000004\n",
      "Epoch: 12950/20000, Loss: 0.000004\n",
      "Epoch: 12960/20000, Loss: 0.000004\n",
      "Epoch: 12970/20000, Loss: 0.000004\n",
      "Epoch: 12980/20000, Loss: 0.000004\n",
      "Epoch: 12990/20000, Loss: 0.000004\n",
      "Epoch: 13000/20000, Loss: 0.000004\n",
      "Epoch: 13010/20000, Loss: 0.000004\n",
      "Epoch: 13020/20000, Loss: 0.000004\n",
      "Epoch: 13030/20000, Loss: 0.000004\n",
      "Epoch: 13040/20000, Loss: 0.000004\n",
      "Epoch: 13050/20000, Loss: 0.000004\n",
      "Epoch: 13060/20000, Loss: 0.000004\n",
      "Epoch: 13070/20000, Loss: 0.000009\n",
      "Epoch: 13080/20000, Loss: 0.000009\n",
      "Epoch: 13090/20000, Loss: 0.000004\n",
      "Epoch: 13100/20000, Loss: 0.000004\n",
      "Epoch: 13110/20000, Loss: 0.000003\n",
      "Epoch: 13120/20000, Loss: 0.000004\n",
      "Epoch: 13130/20000, Loss: 0.000003\n",
      "Epoch: 13140/20000, Loss: 0.000003\n",
      "Epoch: 13150/20000, Loss: 0.000003\n",
      "Epoch: 13160/20000, Loss: 0.000003\n",
      "Epoch: 13170/20000, Loss: 0.000003\n",
      "Epoch: 13180/20000, Loss: 0.000003\n",
      "Epoch: 13190/20000, Loss: 0.000003\n",
      "Epoch: 13200/20000, Loss: 0.000003\n",
      "Epoch: 13210/20000, Loss: 0.000003\n",
      "Epoch: 13220/20000, Loss: 0.000003\n",
      "Epoch: 13230/20000, Loss: 0.000003\n",
      "Epoch: 13240/20000, Loss: 0.000003\n",
      "Epoch: 13250/20000, Loss: 0.000003\n",
      "Epoch: 13260/20000, Loss: 0.000003\n",
      "Epoch: 13270/20000, Loss: 0.000003\n",
      "Epoch: 13280/20000, Loss: 0.000003\n",
      "Epoch: 13290/20000, Loss: 0.000003\n",
      "Epoch: 13300/20000, Loss: 0.000003\n",
      "Epoch: 13310/20000, Loss: 0.000010\n",
      "Epoch: 13320/20000, Loss: 0.000008\n",
      "Epoch: 13330/20000, Loss: 0.000005\n",
      "Epoch: 13340/20000, Loss: 0.000004\n",
      "Epoch: 13350/20000, Loss: 0.000003\n",
      "Epoch: 13360/20000, Loss: 0.000003\n",
      "Epoch: 13370/20000, Loss: 0.000003\n",
      "Epoch: 13380/20000, Loss: 0.000003\n",
      "Epoch: 13390/20000, Loss: 0.000003\n",
      "Epoch: 13400/20000, Loss: 0.000003\n",
      "Epoch: 13410/20000, Loss: 0.000003\n",
      "Epoch: 13420/20000, Loss: 0.000003\n",
      "Epoch: 13430/20000, Loss: 0.000003\n",
      "Epoch: 13440/20000, Loss: 0.000003\n",
      "Epoch: 13450/20000, Loss: 0.000003\n",
      "Epoch: 13460/20000, Loss: 0.000003\n",
      "Epoch: 13470/20000, Loss: 0.000003\n",
      "Epoch: 13480/20000, Loss: 0.000003\n",
      "Epoch: 13490/20000, Loss: 0.000003\n",
      "Epoch: 13500/20000, Loss: 0.000003\n",
      "Epoch: 13510/20000, Loss: 0.000003\n",
      "Epoch: 13520/20000, Loss: 0.000003\n",
      "Epoch: 13530/20000, Loss: 0.000003\n",
      "Epoch: 13540/20000, Loss: 0.000003\n",
      "Epoch: 13550/20000, Loss: 0.000013\n",
      "Epoch: 13560/20000, Loss: 0.000003\n",
      "Epoch: 13570/20000, Loss: 0.000004\n",
      "Epoch: 13580/20000, Loss: 0.000004\n",
      "Epoch: 13590/20000, Loss: 0.000003\n",
      "Epoch: 13600/20000, Loss: 0.000003\n",
      "Epoch: 13610/20000, Loss: 0.000003\n",
      "Epoch: 13620/20000, Loss: 0.000003\n",
      "Epoch: 13630/20000, Loss: 0.000003\n",
      "Epoch: 13640/20000, Loss: 0.000003\n",
      "Epoch: 13650/20000, Loss: 0.000003\n",
      "Epoch: 13660/20000, Loss: 0.000003\n",
      "Epoch: 13670/20000, Loss: 0.000003\n",
      "Epoch: 13680/20000, Loss: 0.000003\n",
      "Epoch: 13690/20000, Loss: 0.000003\n",
      "Epoch: 13700/20000, Loss: 0.000003\n",
      "Epoch: 13710/20000, Loss: 0.000003\n",
      "Epoch: 13720/20000, Loss: 0.000003\n",
      "Epoch: 13730/20000, Loss: 0.000003\n",
      "Epoch: 13740/20000, Loss: 0.000003\n",
      "Epoch: 13750/20000, Loss: 0.000003\n",
      "Epoch: 13760/20000, Loss: 0.000008\n",
      "Epoch: 13770/20000, Loss: 0.000007\n",
      "Epoch: 13780/20000, Loss: 0.000003\n",
      "Epoch: 13790/20000, Loss: 0.000003\n",
      "Epoch: 13800/20000, Loss: 0.000003\n",
      "Epoch: 13810/20000, Loss: 0.000003\n",
      "Epoch: 13820/20000, Loss: 0.000003\n",
      "Epoch: 13830/20000, Loss: 0.000003\n",
      "Epoch: 13840/20000, Loss: 0.000003\n",
      "Epoch: 13850/20000, Loss: 0.000003\n",
      "Epoch: 13860/20000, Loss: 0.000003\n",
      "Epoch: 13870/20000, Loss: 0.000003\n",
      "Epoch: 13880/20000, Loss: 0.000003\n",
      "Epoch: 13890/20000, Loss: 0.000003\n",
      "Epoch: 13900/20000, Loss: 0.000003\n",
      "Epoch: 13910/20000, Loss: 0.000003\n",
      "Epoch: 13920/20000, Loss: 0.000003\n",
      "Epoch: 13930/20000, Loss: 0.000003\n",
      "Epoch: 13940/20000, Loss: 0.000003\n",
      "Epoch: 13950/20000, Loss: 0.000003\n",
      "Epoch: 13960/20000, Loss: 0.000003\n",
      "Epoch: 13970/20000, Loss: 0.000003\n",
      "Epoch: 13980/20000, Loss: 0.000004\n",
      "Epoch: 13990/20000, Loss: 0.000004\n",
      "Epoch: 14000/20000, Loss: 0.000005\n",
      "Epoch: 14010/20000, Loss: 0.000003\n",
      "Epoch: 14020/20000, Loss: 0.000003\n",
      "Epoch: 14030/20000, Loss: 0.000003\n",
      "Epoch: 14040/20000, Loss: 0.000003\n",
      "Epoch: 14050/20000, Loss: 0.000003\n",
      "Epoch: 14060/20000, Loss: 0.000003\n",
      "Epoch: 14070/20000, Loss: 0.000003\n",
      "Epoch: 14080/20000, Loss: 0.000003\n",
      "Epoch: 14090/20000, Loss: 0.000003\n",
      "Epoch: 14100/20000, Loss: 0.000003\n",
      "Epoch: 14110/20000, Loss: 0.000003\n",
      "Epoch: 14120/20000, Loss: 0.000003\n",
      "Epoch: 14130/20000, Loss: 0.000003\n",
      "Epoch: 14140/20000, Loss: 0.000003\n",
      "Epoch: 14150/20000, Loss: 0.000003\n",
      "Epoch: 14160/20000, Loss: 0.000003\n",
      "Epoch: 14170/20000, Loss: 0.000003\n",
      "Epoch: 14180/20000, Loss: 0.000003\n",
      "Epoch: 14190/20000, Loss: 0.000003\n",
      "Epoch: 14200/20000, Loss: 0.000003\n",
      "Epoch: 14210/20000, Loss: 0.000015\n",
      "Epoch: 14220/20000, Loss: 0.000003\n",
      "Epoch: 14230/20000, Loss: 0.000003\n",
      "Epoch: 14240/20000, Loss: 0.000003\n",
      "Epoch: 14250/20000, Loss: 0.000003\n",
      "Epoch: 14260/20000, Loss: 0.000003\n",
      "Epoch: 14270/20000, Loss: 0.000003\n",
      "Epoch: 14280/20000, Loss: 0.000003\n",
      "Epoch: 14290/20000, Loss: 0.000003\n",
      "Epoch: 14300/20000, Loss: 0.000003\n",
      "Epoch: 14310/20000, Loss: 0.000003\n",
      "Epoch: 14320/20000, Loss: 0.000003\n",
      "Epoch: 14330/20000, Loss: 0.000003\n",
      "Epoch: 14340/20000, Loss: 0.000003\n",
      "Epoch: 14350/20000, Loss: 0.000003\n",
      "Epoch: 14360/20000, Loss: 0.000003\n",
      "Epoch: 14370/20000, Loss: 0.000003\n",
      "Epoch: 14380/20000, Loss: 0.000003\n",
      "Epoch: 14390/20000, Loss: 0.000003\n",
      "Epoch: 14400/20000, Loss: 0.000003\n",
      "Epoch: 14410/20000, Loss: 0.000003\n",
      "Epoch: 14420/20000, Loss: 0.000003\n",
      "Epoch: 14430/20000, Loss: 0.000003\n",
      "Epoch: 14440/20000, Loss: 0.000003\n",
      "Epoch: 14450/20000, Loss: 0.000003\n",
      "Epoch: 14460/20000, Loss: 0.000014\n",
      "Epoch: 14470/20000, Loss: 0.000003\n",
      "Epoch: 14480/20000, Loss: 0.000004\n",
      "Epoch: 14490/20000, Loss: 0.000003\n",
      "Epoch: 14500/20000, Loss: 0.000003\n",
      "Epoch: 14510/20000, Loss: 0.000003\n",
      "Epoch: 14520/20000, Loss: 0.000003\n",
      "Epoch: 14530/20000, Loss: 0.000003\n",
      "Epoch: 14540/20000, Loss: 0.000003\n",
      "Epoch: 14550/20000, Loss: 0.000003\n",
      "Epoch: 14560/20000, Loss: 0.000003\n",
      "Epoch: 14570/20000, Loss: 0.000003\n",
      "Epoch: 14580/20000, Loss: 0.000003\n",
      "Epoch: 14590/20000, Loss: 0.000003\n",
      "Epoch: 14600/20000, Loss: 0.000003\n",
      "Epoch: 14610/20000, Loss: 0.000003\n",
      "Epoch: 14620/20000, Loss: 0.000003\n",
      "Epoch: 14630/20000, Loss: 0.000003\n",
      "Epoch: 14640/20000, Loss: 0.000003\n",
      "Epoch: 14650/20000, Loss: 0.000003\n",
      "Epoch: 14660/20000, Loss: 0.000003\n",
      "Epoch: 14670/20000, Loss: 0.000003\n",
      "Epoch: 14680/20000, Loss: 0.000003\n",
      "Epoch: 14690/20000, Loss: 0.000003\n",
      "Epoch: 14700/20000, Loss: 0.000005\n",
      "Epoch: 14710/20000, Loss: 0.000006\n",
      "Epoch: 14720/20000, Loss: 0.000003\n",
      "Epoch: 14730/20000, Loss: 0.000003\n",
      "Epoch: 14740/20000, Loss: 0.000003\n",
      "Epoch: 14750/20000, Loss: 0.000003\n",
      "Epoch: 14760/20000, Loss: 0.000003\n",
      "Epoch: 14770/20000, Loss: 0.000003\n",
      "Epoch: 14780/20000, Loss: 0.000003\n",
      "Epoch: 14790/20000, Loss: 0.000003\n",
      "Epoch: 14800/20000, Loss: 0.000003\n",
      "Epoch: 14810/20000, Loss: 0.000003\n",
      "Epoch: 14820/20000, Loss: 0.000003\n",
      "Epoch: 14830/20000, Loss: 0.000003\n",
      "Epoch: 14840/20000, Loss: 0.000003\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 14850/20000, Loss: 0.000003\n",
      "Epoch: 14860/20000, Loss: 0.000003\n",
      "Epoch: 14870/20000, Loss: 0.000003\n",
      "Epoch: 14880/20000, Loss: 0.000003\n",
      "Epoch: 14890/20000, Loss: 0.000003\n",
      "Epoch: 14900/20000, Loss: 0.000003\n",
      "Epoch: 14910/20000, Loss: 0.000003\n",
      "Epoch: 14920/20000, Loss: 0.000003\n",
      "Epoch: 14930/20000, Loss: 0.000003\n",
      "Epoch: 14940/20000, Loss: 0.000003\n",
      "Epoch: 14950/20000, Loss: 0.000003\n",
      "Epoch: 14960/20000, Loss: 0.000005\n",
      "Epoch: 14970/20000, Loss: 0.000006\n",
      "Epoch: 14980/20000, Loss: 0.000003\n",
      "Epoch: 14990/20000, Loss: 0.000003\n",
      "Epoch: 15000/20000, Loss: 0.000003\n",
      "Epoch: 15010/20000, Loss: 0.000003\n",
      "Epoch: 15020/20000, Loss: 0.000003\n",
      "Epoch: 15030/20000, Loss: 0.000003\n",
      "Epoch: 15040/20000, Loss: 0.000003\n",
      "Epoch: 15050/20000, Loss: 0.000003\n",
      "Epoch: 15060/20000, Loss: 0.000003\n",
      "Epoch: 15070/20000, Loss: 0.000003\n",
      "Epoch: 15080/20000, Loss: 0.000003\n",
      "Epoch: 15090/20000, Loss: 0.000003\n",
      "Epoch: 15100/20000, Loss: 0.000003\n",
      "Epoch: 15110/20000, Loss: 0.000003\n",
      "Epoch: 15120/20000, Loss: 0.000003\n",
      "Epoch: 15130/20000, Loss: 0.000003\n",
      "Epoch: 15140/20000, Loss: 0.000003\n",
      "Epoch: 15150/20000, Loss: 0.000003\n",
      "Epoch: 15160/20000, Loss: 0.000003\n",
      "Epoch: 15170/20000, Loss: 0.000003\n",
      "Epoch: 15180/20000, Loss: 0.000003\n",
      "Epoch: 15190/20000, Loss: 0.000003\n",
      "Epoch: 15200/20000, Loss: 0.000003\n",
      "Epoch: 15210/20000, Loss: 0.000003\n",
      "Epoch: 15220/20000, Loss: 0.000006\n",
      "Epoch: 15230/20000, Loss: 0.000005\n",
      "Epoch: 15240/20000, Loss: 0.000003\n",
      "Epoch: 15250/20000, Loss: 0.000003\n",
      "Epoch: 15260/20000, Loss: 0.000003\n",
      "Epoch: 15270/20000, Loss: 0.000003\n",
      "Epoch: 15280/20000, Loss: 0.000003\n",
      "Epoch: 15290/20000, Loss: 0.000003\n",
      "Epoch: 15300/20000, Loss: 0.000003\n",
      "Epoch: 15310/20000, Loss: 0.000003\n",
      "Epoch: 15320/20000, Loss: 0.000003\n",
      "Epoch: 15330/20000, Loss: 0.000003\n",
      "Epoch: 15340/20000, Loss: 0.000003\n",
      "Epoch: 15350/20000, Loss: 0.000003\n",
      "Epoch: 15360/20000, Loss: 0.000003\n",
      "Epoch: 15370/20000, Loss: 0.000003\n",
      "Epoch: 15380/20000, Loss: 0.000003\n",
      "Epoch: 15390/20000, Loss: 0.000003\n",
      "Epoch: 15400/20000, Loss: 0.000003\n",
      "Epoch: 15410/20000, Loss: 0.000003\n",
      "Epoch: 15420/20000, Loss: 0.000003\n",
      "Epoch: 15430/20000, Loss: 0.000003\n",
      "Epoch: 15440/20000, Loss: 0.000003\n",
      "Epoch: 15450/20000, Loss: 0.000004\n",
      "Epoch: 15460/20000, Loss: 0.000004\n",
      "Epoch: 15470/20000, Loss: 0.000003\n",
      "Epoch: 15480/20000, Loss: 0.000003\n",
      "Epoch: 15490/20000, Loss: 0.000003\n",
      "Epoch: 15500/20000, Loss: 0.000003\n",
      "Epoch: 15510/20000, Loss: 0.000003\n",
      "Epoch: 15520/20000, Loss: 0.000003\n",
      "Epoch: 15530/20000, Loss: 0.000003\n",
      "Epoch: 15540/20000, Loss: 0.000003\n",
      "Epoch: 15550/20000, Loss: 0.000003\n",
      "Epoch: 15560/20000, Loss: 0.000003\n",
      "Epoch: 15570/20000, Loss: 0.000003\n",
      "Epoch: 15580/20000, Loss: 0.000003\n",
      "Epoch: 15590/20000, Loss: 0.000003\n",
      "Epoch: 15600/20000, Loss: 0.000003\n",
      "Epoch: 15610/20000, Loss: 0.000003\n",
      "Epoch: 15620/20000, Loss: 0.000003\n",
      "Epoch: 15630/20000, Loss: 0.000003\n",
      "Epoch: 15640/20000, Loss: 0.000003\n",
      "Epoch: 15650/20000, Loss: 0.000003\n",
      "Epoch: 15660/20000, Loss: 0.000003\n",
      "Epoch: 15670/20000, Loss: 0.000003\n",
      "Epoch: 15680/20000, Loss: 0.000003\n",
      "Epoch: 15690/20000, Loss: 0.000003\n",
      "Epoch: 15700/20000, Loss: 0.000003\n",
      "Epoch: 15710/20000, Loss: 0.000003\n",
      "Epoch: 15720/20000, Loss: 0.000003\n",
      "Epoch: 15730/20000, Loss: 0.000004\n",
      "Epoch: 15740/20000, Loss: 0.000003\n",
      "Epoch: 15750/20000, Loss: 0.000003\n",
      "Epoch: 15760/20000, Loss: 0.000003\n",
      "Epoch: 15770/20000, Loss: 0.000003\n",
      "Epoch: 15780/20000, Loss: 0.000003\n",
      "Epoch: 15790/20000, Loss: 0.000003\n",
      "Epoch: 15800/20000, Loss: 0.000003\n",
      "Epoch: 15810/20000, Loss: 0.000003\n",
      "Epoch: 15820/20000, Loss: 0.000002\n",
      "Epoch: 15830/20000, Loss: 0.000002\n",
      "Epoch: 15840/20000, Loss: 0.000002\n",
      "Epoch: 15850/20000, Loss: 0.000002\n",
      "Epoch: 15860/20000, Loss: 0.000002\n",
      "Epoch: 15870/20000, Loss: 0.000002\n",
      "Epoch: 15880/20000, Loss: 0.000002\n",
      "Epoch: 15890/20000, Loss: 0.000002\n",
      "Epoch: 15900/20000, Loss: 0.000002\n",
      "Epoch: 15910/20000, Loss: 0.000002\n",
      "Epoch: 15920/20000, Loss: 0.000002\n",
      "Epoch: 15930/20000, Loss: 0.000002\n",
      "Epoch: 15940/20000, Loss: 0.000002\n",
      "Epoch: 15950/20000, Loss: 0.000002\n",
      "Epoch: 15960/20000, Loss: 0.000002\n",
      "Epoch: 15970/20000, Loss: 0.000002\n",
      "Epoch: 15980/20000, Loss: 0.000002\n",
      "Epoch: 15990/20000, Loss: 0.000004\n",
      "Epoch: 16000/20000, Loss: 0.000003\n",
      "Epoch: 16010/20000, Loss: 0.000004\n",
      "Epoch: 16020/20000, Loss: 0.000003\n",
      "Epoch: 16030/20000, Loss: 0.000003\n",
      "Epoch: 16040/20000, Loss: 0.000003\n",
      "Epoch: 16050/20000, Loss: 0.000002\n",
      "Epoch: 16060/20000, Loss: 0.000002\n",
      "Epoch: 16070/20000, Loss: 0.000002\n",
      "Epoch: 16080/20000, Loss: 0.000002\n",
      "Epoch: 16090/20000, Loss: 0.000002\n",
      "Epoch: 16100/20000, Loss: 0.000002\n",
      "Epoch: 16110/20000, Loss: 0.000003\n",
      "Epoch: 16120/20000, Loss: 0.000002\n",
      "Epoch: 16130/20000, Loss: 0.000002\n",
      "Epoch: 16140/20000, Loss: 0.000002\n",
      "Epoch: 16150/20000, Loss: 0.000002\n",
      "Epoch: 16160/20000, Loss: 0.000002\n",
      "Epoch: 16170/20000, Loss: 0.000002\n",
      "Epoch: 16180/20000, Loss: 0.000002\n",
      "Epoch: 16190/20000, Loss: 0.000002\n",
      "Epoch: 16200/20000, Loss: 0.000002\n",
      "Epoch: 16210/20000, Loss: 0.000002\n",
      "Epoch: 16220/20000, Loss: 0.000003\n",
      "Epoch: 16230/20000, Loss: 0.000004\n",
      "Epoch: 16240/20000, Loss: 0.000002\n",
      "Epoch: 16250/20000, Loss: 0.000003\n",
      "Epoch: 16260/20000, Loss: 0.000002\n",
      "Epoch: 16270/20000, Loss: 0.000002\n",
      "Epoch: 16280/20000, Loss: 0.000002\n",
      "Epoch: 16290/20000, Loss: 0.000003\n",
      "Epoch: 16300/20000, Loss: 0.000004\n",
      "Epoch: 16310/20000, Loss: 0.000002\n",
      "Epoch: 16320/20000, Loss: 0.000003\n",
      "Epoch: 16330/20000, Loss: 0.000002\n",
      "Epoch: 16340/20000, Loss: 0.000002\n",
      "Epoch: 16350/20000, Loss: 0.000003\n",
      "Epoch: 16360/20000, Loss: 0.000003\n",
      "Epoch: 16370/20000, Loss: 0.000003\n",
      "Epoch: 16380/20000, Loss: 0.000002\n",
      "Epoch: 16390/20000, Loss: 0.000003\n",
      "Epoch: 16400/20000, Loss: 0.000003\n",
      "Epoch: 16410/20000, Loss: 0.000003\n",
      "Epoch: 16420/20000, Loss: 0.000003\n",
      "Epoch: 16430/20000, Loss: 0.000002\n",
      "Epoch: 16440/20000, Loss: 0.000002\n",
      "Epoch: 16450/20000, Loss: 0.000002\n",
      "Epoch: 16460/20000, Loss: 0.000002\n",
      "Epoch: 16470/20000, Loss: 0.000003\n",
      "Epoch: 16480/20000, Loss: 0.000009\n",
      "Epoch: 16490/20000, Loss: 0.000003\n",
      "Epoch: 16500/20000, Loss: 0.000003\n",
      "Epoch: 16510/20000, Loss: 0.000002\n",
      "Epoch: 16520/20000, Loss: 0.000002\n",
      "Epoch: 16530/20000, Loss: 0.000002\n",
      "Epoch: 16540/20000, Loss: 0.000002\n",
      "Epoch: 16550/20000, Loss: 0.000002\n",
      "Epoch: 16560/20000, Loss: 0.000002\n",
      "Epoch: 16570/20000, Loss: 0.000002\n",
      "Epoch: 16580/20000, Loss: 0.000002\n",
      "Epoch: 16590/20000, Loss: 0.000002\n",
      "Epoch: 16600/20000, Loss: 0.000002\n",
      "Epoch: 16610/20000, Loss: 0.000002\n",
      "Epoch: 16620/20000, Loss: 0.000002\n",
      "Epoch: 16630/20000, Loss: 0.000002\n",
      "Epoch: 16640/20000, Loss: 0.000003\n",
      "Epoch: 16650/20000, Loss: 0.000005\n",
      "Epoch: 16660/20000, Loss: 0.000002\n",
      "Epoch: 16670/20000, Loss: 0.000002\n",
      "Epoch: 16680/20000, Loss: 0.000002\n",
      "Epoch: 16690/20000, Loss: 0.000002\n",
      "Epoch: 16700/20000, Loss: 0.000002\n",
      "Epoch: 16710/20000, Loss: 0.000002\n",
      "Epoch: 16720/20000, Loss: 0.000002\n",
      "Epoch: 16730/20000, Loss: 0.000002\n",
      "Epoch: 16740/20000, Loss: 0.000002\n",
      "Epoch: 16750/20000, Loss: 0.000002\n",
      "Epoch: 16760/20000, Loss: 0.000002\n",
      "Epoch: 16770/20000, Loss: 0.000002\n",
      "Epoch: 16780/20000, Loss: 0.000002\n",
      "Epoch: 16790/20000, Loss: 0.000004\n",
      "Epoch: 16800/20000, Loss: 0.000002\n",
      "Epoch: 16810/20000, Loss: 0.000004\n",
      "Epoch: 16820/20000, Loss: 0.000002\n",
      "Epoch: 16830/20000, Loss: 0.000002\n",
      "Epoch: 16840/20000, Loss: 0.000002\n",
      "Epoch: 16850/20000, Loss: 0.000002\n",
      "Epoch: 16860/20000, Loss: 0.000002\n",
      "Epoch: 16870/20000, Loss: 0.000002\n",
      "Epoch: 16880/20000, Loss: 0.000002\n",
      "Epoch: 16890/20000, Loss: 0.000002\n",
      "Epoch: 16900/20000, Loss: 0.000002\n",
      "Epoch: 16910/20000, Loss: 0.000002\n",
      "Epoch: 16920/20000, Loss: 0.000002\n",
      "Epoch: 16930/20000, Loss: 0.000002\n",
      "Epoch: 16940/20000, Loss: 0.000002\n",
      "Epoch: 16950/20000, Loss: 0.000002\n",
      "Epoch: 16960/20000, Loss: 0.000003\n",
      "Epoch: 16970/20000, Loss: 0.000006\n",
      "Epoch: 16980/20000, Loss: 0.000003\n",
      "Epoch: 16990/20000, Loss: 0.000002\n",
      "Epoch: 17000/20000, Loss: 0.000002\n",
      "Epoch: 17010/20000, Loss: 0.000002\n",
      "Epoch: 17020/20000, Loss: 0.000002\n",
      "Epoch: 17030/20000, Loss: 0.000002\n",
      "Epoch: 17040/20000, Loss: 0.000002\n",
      "Epoch: 17050/20000, Loss: 0.000002\n",
      "Epoch: 17060/20000, Loss: 0.000002\n",
      "Epoch: 17070/20000, Loss: 0.000002\n",
      "Epoch: 17080/20000, Loss: 0.000002\n",
      "Epoch: 17090/20000, Loss: 0.000006\n",
      "Epoch: 17100/20000, Loss: 0.000003\n",
      "Epoch: 17110/20000, Loss: 0.000003\n",
      "Epoch: 17120/20000, Loss: 0.000002\n",
      "Epoch: 17130/20000, Loss: 0.000002\n",
      "Epoch: 17140/20000, Loss: 0.000002\n",
      "Epoch: 17150/20000, Loss: 0.000002\n",
      "Epoch: 17160/20000, Loss: 0.000002\n",
      "Epoch: 17170/20000, Loss: 0.000002\n",
      "Epoch: 17180/20000, Loss: 0.000002\n",
      "Epoch: 17190/20000, Loss: 0.000002\n",
      "Epoch: 17200/20000, Loss: 0.000002\n",
      "Epoch: 17210/20000, Loss: 0.000005\n",
      "Epoch: 17220/20000, Loss: 0.000002\n",
      "Epoch: 17230/20000, Loss: 0.000002\n",
      "Epoch: 17240/20000, Loss: 0.000002\n",
      "Epoch: 17250/20000, Loss: 0.000002\n",
      "Epoch: 17260/20000, Loss: 0.000002\n",
      "Epoch: 17270/20000, Loss: 0.000002\n",
      "Epoch: 17280/20000, Loss: 0.000002\n",
      "Epoch: 17290/20000, Loss: 0.000003\n",
      "Epoch: 17300/20000, Loss: 0.000003\n",
      "Epoch: 17310/20000, Loss: 0.000002\n",
      "Epoch: 17320/20000, Loss: 0.000002\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 17330/20000, Loss: 0.000002\n",
      "Epoch: 17340/20000, Loss: 0.000002\n",
      "Epoch: 17350/20000, Loss: 0.000002\n",
      "Epoch: 17360/20000, Loss: 0.000004\n",
      "Epoch: 17370/20000, Loss: 0.000002\n",
      "Epoch: 17380/20000, Loss: 0.000002\n",
      "Epoch: 17390/20000, Loss: 0.000002\n",
      "Epoch: 17400/20000, Loss: 0.000002\n",
      "Epoch: 17410/20000, Loss: 0.000002\n",
      "Epoch: 17420/20000, Loss: 0.000003\n",
      "Epoch: 17430/20000, Loss: 0.000002\n",
      "Epoch: 17440/20000, Loss: 0.000002\n",
      "Epoch: 17450/20000, Loss: 0.000002\n",
      "Epoch: 17460/20000, Loss: 0.000003\n",
      "Epoch: 17470/20000, Loss: 0.000002\n",
      "Epoch: 17480/20000, Loss: 0.000002\n",
      "Epoch: 17490/20000, Loss: 0.000002\n",
      "Epoch: 17500/20000, Loss: 0.000003\n",
      "Epoch: 17510/20000, Loss: 0.000004\n",
      "Epoch: 17520/20000, Loss: 0.000003\n",
      "Epoch: 17530/20000, Loss: 0.000002\n",
      "Epoch: 17540/20000, Loss: 0.000002\n",
      "Epoch: 17550/20000, Loss: 0.000002\n",
      "Epoch: 17560/20000, Loss: 0.000002\n",
      "Epoch: 17570/20000, Loss: 0.000002\n",
      "Epoch: 17580/20000, Loss: 0.000002\n",
      "Epoch: 17590/20000, Loss: 0.000004\n",
      "Epoch: 17600/20000, Loss: 0.000002\n",
      "Epoch: 17610/20000, Loss: 0.000002\n",
      "Epoch: 17620/20000, Loss: 0.000002\n",
      "Epoch: 17630/20000, Loss: 0.000002\n",
      "Epoch: 17640/20000, Loss: 0.000002\n",
      "Epoch: 17650/20000, Loss: 0.000002\n",
      "Epoch: 17660/20000, Loss: 0.000002\n",
      "Epoch: 17670/20000, Loss: 0.000002\n",
      "Epoch: 17680/20000, Loss: 0.000002\n",
      "Epoch: 17690/20000, Loss: 0.000002\n",
      "Epoch: 17700/20000, Loss: 0.000005\n",
      "Epoch: 17710/20000, Loss: 0.000002\n",
      "Epoch: 17720/20000, Loss: 0.000003\n",
      "Epoch: 17730/20000, Loss: 0.000002\n",
      "Epoch: 17740/20000, Loss: 0.000002\n",
      "Epoch: 17750/20000, Loss: 0.000002\n",
      "Epoch: 17760/20000, Loss: 0.000002\n",
      "Epoch: 17770/20000, Loss: 0.000002\n",
      "Epoch: 17780/20000, Loss: 0.000002\n",
      "Epoch: 17790/20000, Loss: 0.000002\n",
      "Epoch: 17800/20000, Loss: 0.000002\n",
      "Epoch: 17810/20000, Loss: 0.000002\n",
      "Epoch: 17820/20000, Loss: 0.000002\n",
      "Epoch: 17830/20000, Loss: 0.000002\n",
      "Epoch: 17840/20000, Loss: 0.000002\n",
      "Epoch: 17850/20000, Loss: 0.000008\n",
      "Epoch: 17860/20000, Loss: 0.000004\n",
      "Epoch: 17870/20000, Loss: 0.000002\n",
      "Epoch: 17880/20000, Loss: 0.000002\n",
      "Epoch: 17890/20000, Loss: 0.000002\n",
      "Epoch: 17900/20000, Loss: 0.000002\n",
      "Epoch: 17910/20000, Loss: 0.000002\n",
      "Epoch: 17920/20000, Loss: 0.000002\n",
      "Epoch: 17930/20000, Loss: 0.000002\n",
      "Epoch: 17940/20000, Loss: 0.000002\n",
      "Epoch: 17950/20000, Loss: 0.000002\n",
      "Epoch: 17960/20000, Loss: 0.000002\n",
      "Epoch: 17970/20000, Loss: 0.000002\n",
      "Epoch: 17980/20000, Loss: 0.000002\n",
      "Epoch: 17990/20000, Loss: 0.000003\n",
      "Epoch: 18000/20000, Loss: 0.000003\n",
      "Epoch: 18010/20000, Loss: 0.000002\n",
      "Epoch: 18020/20000, Loss: 0.000002\n",
      "Epoch: 18030/20000, Loss: 0.000002\n",
      "Epoch: 18040/20000, Loss: 0.000002\n",
      "Epoch: 18050/20000, Loss: 0.000002\n",
      "Epoch: 18060/20000, Loss: 0.000002\n",
      "Epoch: 18070/20000, Loss: 0.000002\n",
      "Epoch: 18080/20000, Loss: 0.000002\n",
      "Epoch: 18090/20000, Loss: 0.000002\n",
      "Epoch: 18100/20000, Loss: 0.000002\n",
      "Epoch: 18110/20000, Loss: 0.000005\n",
      "Epoch: 18120/20000, Loss: 0.000002\n",
      "Epoch: 18130/20000, Loss: 0.000002\n",
      "Epoch: 18140/20000, Loss: 0.000002\n",
      "Epoch: 18150/20000, Loss: 0.000002\n",
      "Epoch: 18160/20000, Loss: 0.000002\n",
      "Epoch: 18170/20000, Loss: 0.000002\n",
      "Epoch: 18180/20000, Loss: 0.000002\n",
      "Epoch: 18190/20000, Loss: 0.000002\n",
      "Epoch: 18200/20000, Loss: 0.000002\n",
      "Epoch: 18210/20000, Loss: 0.000002\n",
      "Epoch: 18220/20000, Loss: 0.000002\n",
      "Epoch: 18230/20000, Loss: 0.000002\n",
      "Epoch: 18240/20000, Loss: 0.000004\n",
      "Epoch: 18250/20000, Loss: 0.000002\n",
      "Epoch: 18260/20000, Loss: 0.000003\n",
      "Epoch: 18270/20000, Loss: 0.000002\n",
      "Epoch: 18280/20000, Loss: 0.000002\n",
      "Epoch: 18290/20000, Loss: 0.000002\n",
      "Epoch: 18300/20000, Loss: 0.000002\n",
      "Epoch: 18310/20000, Loss: 0.000002\n",
      "Epoch: 18320/20000, Loss: 0.000002\n",
      "Epoch: 18330/20000, Loss: 0.000002\n",
      "Epoch: 18340/20000, Loss: 0.000002\n",
      "Epoch: 18350/20000, Loss: 0.000002\n",
      "Epoch: 18360/20000, Loss: 0.000002\n",
      "Epoch: 18370/20000, Loss: 0.000002\n",
      "Epoch: 18380/20000, Loss: 0.000002\n",
      "Epoch: 18390/20000, Loss: 0.000002\n",
      "Epoch: 18400/20000, Loss: 0.000002\n",
      "Epoch: 18410/20000, Loss: 0.000002\n",
      "Epoch: 18420/20000, Loss: 0.000005\n",
      "Epoch: 18430/20000, Loss: 0.000003\n",
      "Epoch: 18440/20000, Loss: 0.000003\n",
      "Epoch: 18450/20000, Loss: 0.000002\n",
      "Epoch: 18460/20000, Loss: 0.000002\n",
      "Epoch: 18470/20000, Loss: 0.000002\n",
      "Epoch: 18480/20000, Loss: 0.000002\n",
      "Epoch: 18490/20000, Loss: 0.000002\n",
      "Epoch: 18500/20000, Loss: 0.000002\n",
      "Epoch: 18510/20000, Loss: 0.000002\n",
      "Epoch: 18520/20000, Loss: 0.000002\n",
      "Epoch: 18530/20000, Loss: 0.000002\n",
      "Epoch: 18540/20000, Loss: 0.000002\n",
      "Epoch: 18550/20000, Loss: 0.000002\n",
      "Epoch: 18560/20000, Loss: 0.000003\n",
      "Epoch: 18570/20000, Loss: 0.000003\n",
      "Epoch: 18580/20000, Loss: 0.000002\n",
      "Epoch: 18590/20000, Loss: 0.000002\n",
      "Epoch: 18600/20000, Loss: 0.000002\n",
      "Epoch: 18610/20000, Loss: 0.000002\n",
      "Epoch: 18620/20000, Loss: 0.000002\n",
      "Epoch: 18630/20000, Loss: 0.000002\n",
      "Epoch: 18640/20000, Loss: 0.000002\n",
      "Epoch: 18650/20000, Loss: 0.000002\n",
      "Epoch: 18660/20000, Loss: 0.000002\n",
      "Epoch: 18670/20000, Loss: 0.000002\n",
      "Epoch: 18680/20000, Loss: 0.000002\n",
      "Epoch: 18690/20000, Loss: 0.000002\n",
      "Epoch: 18700/20000, Loss: 0.000002\n",
      "Epoch: 18710/20000, Loss: 0.000002\n",
      "Epoch: 18720/20000, Loss: 0.000003\n",
      "Epoch: 18730/20000, Loss: 0.000004\n",
      "Epoch: 18740/20000, Loss: 0.000002\n",
      "Epoch: 18750/20000, Loss: 0.000002\n",
      "Epoch: 18760/20000, Loss: 0.000002\n",
      "Epoch: 18770/20000, Loss: 0.000002\n",
      "Epoch: 18780/20000, Loss: 0.000002\n",
      "Epoch: 18790/20000, Loss: 0.000002\n",
      "Epoch: 18800/20000, Loss: 0.000002\n",
      "Epoch: 18810/20000, Loss: 0.000002\n",
      "Epoch: 18820/20000, Loss: 0.000002\n",
      "Epoch: 18830/20000, Loss: 0.000002\n",
      "Epoch: 18840/20000, Loss: 0.000003\n",
      "Epoch: 18850/20000, Loss: 0.000002\n",
      "Epoch: 18860/20000, Loss: 0.000002\n",
      "Epoch: 18870/20000, Loss: 0.000002\n",
      "Epoch: 18880/20000, Loss: 0.000002\n",
      "Epoch: 18890/20000, Loss: 0.000002\n",
      "Epoch: 18900/20000, Loss: 0.000002\n",
      "Epoch: 18910/20000, Loss: 0.000002\n",
      "Epoch: 18920/20000, Loss: 0.000002\n",
      "Epoch: 18930/20000, Loss: 0.000002\n",
      "Epoch: 18940/20000, Loss: 0.000002\n",
      "Epoch: 18950/20000, Loss: 0.000002\n",
      "Epoch: 18960/20000, Loss: 0.000002\n",
      "Epoch: 18970/20000, Loss: 0.000002\n",
      "Epoch: 18980/20000, Loss: 0.000002\n",
      "Epoch: 18990/20000, Loss: 0.000002\n",
      "Epoch: 19000/20000, Loss: 0.000008\n",
      "Epoch: 19010/20000, Loss: 0.000002\n",
      "Epoch: 19020/20000, Loss: 0.000002\n",
      "Epoch: 19030/20000, Loss: 0.000002\n",
      "Epoch: 19040/20000, Loss: 0.000002\n",
      "Epoch: 19050/20000, Loss: 0.000002\n",
      "Epoch: 19060/20000, Loss: 0.000002\n",
      "Epoch: 19070/20000, Loss: 0.000002\n",
      "Epoch: 19080/20000, Loss: 0.000002\n",
      "Epoch: 19090/20000, Loss: 0.000002\n",
      "Epoch: 19100/20000, Loss: 0.000002\n",
      "Epoch: 19110/20000, Loss: 0.000002\n",
      "Epoch: 19120/20000, Loss: 0.000002\n",
      "Epoch: 19130/20000, Loss: 0.000002\n",
      "Epoch: 19140/20000, Loss: 0.000002\n",
      "Epoch: 19150/20000, Loss: 0.000002\n",
      "Epoch: 19160/20000, Loss: 0.000002\n",
      "Epoch: 19170/20000, Loss: 0.000005\n",
      "Epoch: 19180/20000, Loss: 0.000003\n",
      "Epoch: 19190/20000, Loss: 0.000002\n",
      "Epoch: 19200/20000, Loss: 0.000002\n",
      "Epoch: 19210/20000, Loss: 0.000002\n",
      "Epoch: 19220/20000, Loss: 0.000002\n",
      "Epoch: 19230/20000, Loss: 0.000002\n",
      "Epoch: 19240/20000, Loss: 0.000002\n",
      "Epoch: 19250/20000, Loss: 0.000002\n",
      "Epoch: 19260/20000, Loss: 0.000002\n",
      "Epoch: 19270/20000, Loss: 0.000002\n",
      "Epoch: 19280/20000, Loss: 0.000007\n",
      "Epoch: 19290/20000, Loss: 0.000004\n",
      "Epoch: 19300/20000, Loss: 0.000002\n",
      "Epoch: 19310/20000, Loss: 0.000002\n",
      "Epoch: 19320/20000, Loss: 0.000002\n",
      "Epoch: 19330/20000, Loss: 0.000002\n",
      "Epoch: 19340/20000, Loss: 0.000002\n",
      "Epoch: 19350/20000, Loss: 0.000002\n",
      "Epoch: 19360/20000, Loss: 0.000002\n",
      "Epoch: 19370/20000, Loss: 0.000002\n",
      "Epoch: 19380/20000, Loss: 0.000002\n",
      "Epoch: 19390/20000, Loss: 0.000002\n",
      "Epoch: 19400/20000, Loss: 0.000002\n",
      "Epoch: 19410/20000, Loss: 0.000002\n",
      "Epoch: 19420/20000, Loss: 0.000002\n",
      "Epoch: 19430/20000, Loss: 0.000002\n",
      "Epoch: 19440/20000, Loss: 0.000002\n",
      "Epoch: 19450/20000, Loss: 0.000002\n",
      "Epoch: 19460/20000, Loss: 0.000010\n",
      "Epoch: 19470/20000, Loss: 0.000002\n",
      "Epoch: 19480/20000, Loss: 0.000002\n",
      "Epoch: 19490/20000, Loss: 0.000002\n",
      "Epoch: 19500/20000, Loss: 0.000002\n",
      "Epoch: 19510/20000, Loss: 0.000002\n",
      "Epoch: 19520/20000, Loss: 0.000002\n",
      "Epoch: 19530/20000, Loss: 0.000002\n",
      "Epoch: 19540/20000, Loss: 0.000002\n",
      "Epoch: 19550/20000, Loss: 0.000002\n",
      "Epoch: 19560/20000, Loss: 0.000002\n",
      "Epoch: 19570/20000, Loss: 0.000002\n",
      "Epoch: 19580/20000, Loss: 0.000002\n",
      "Epoch: 19590/20000, Loss: 0.000002\n",
      "Epoch: 19600/20000, Loss: 0.000002\n",
      "Epoch: 19610/20000, Loss: 0.000002\n",
      "Epoch: 19620/20000, Loss: 0.000002\n",
      "Epoch: 19630/20000, Loss: 0.000002\n",
      "Epoch: 19640/20000, Loss: 0.000002\n",
      "Epoch: 19650/20000, Loss: 0.000003\n",
      "Epoch: 19660/20000, Loss: 0.000002\n",
      "Epoch: 19670/20000, Loss: 0.000004\n",
      "Epoch: 19680/20000, Loss: 0.000002\n",
      "Epoch: 19690/20000, Loss: 0.000002\n",
      "Epoch: 19700/20000, Loss: 0.000002\n",
      "Epoch: 19710/20000, Loss: 0.000002\n",
      "Epoch: 19720/20000, Loss: 0.000002\n",
      "Epoch: 19730/20000, Loss: 0.000001\n",
      "Epoch: 19740/20000, Loss: 0.000001\n",
      "Epoch: 19750/20000, Loss: 0.000001\n",
      "Epoch: 19760/20000, Loss: 0.000001\n",
      "Epoch: 19770/20000, Loss: 0.000001\n",
      "Epoch: 19780/20000, Loss: 0.000001\n",
      "Epoch: 19790/20000, Loss: 0.000001\n",
      "Epoch: 19800/20000, Loss: 0.000001\n",
      "Epoch: 19810/20000, Loss: 0.000001\n",
      "Epoch: 19820/20000, Loss: 0.000001\n",
      "Epoch: 19830/20000, Loss: 0.000001\n",
      "Epoch: 19840/20000, Loss: 0.000002\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 19850/20000, Loss: 0.000002\n",
      "Epoch: 19860/20000, Loss: 0.000002\n",
      "Epoch: 19870/20000, Loss: 0.000004\n",
      "Epoch: 19880/20000, Loss: 0.000001\n",
      "Epoch: 19890/20000, Loss: 0.000002\n",
      "Epoch: 19900/20000, Loss: 0.000002\n",
      "Epoch: 19910/20000, Loss: 0.000002\n",
      "Epoch: 19920/20000, Loss: 0.000002\n",
      "Epoch: 19930/20000, Loss: 0.000001\n",
      "Epoch: 19940/20000, Loss: 0.000001\n",
      "Epoch: 19950/20000, Loss: 0.000002\n",
      "Epoch: 19960/20000, Loss: 0.000003\n",
      "Epoch: 19970/20000, Loss: 0.000002\n",
      "Epoch: 19980/20000, Loss: 0.000002\n",
      "Epoch: 19990/20000, Loss: 0.000002\n",
      "Epoch: 20000/20000, Loss: 0.000001\n"
     ]
    }
   ],
   "source": [
    "# Create LEM instance\n",
    "lem = LEM(input_size, hidden_size, output_size, dt=0.1)\n",
    "\n",
    "# Loss and optimizer\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(lem.parameters(), lr=0.001)\n",
    "\n",
    "\n",
    "\n",
    "# Training loop\n",
    "for epoch in range(num_epochs):\n",
    "    # Forward pass\n",
    "    output = lem(input_tensor)\n",
    "    loss = criterion(output, target_tensor)\n",
    "\n",
    "    # Backward and optimize\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "\n",
    "    # Print progress\n",
    "    if (epoch + 1) % 10 == 0:\n",
    "        print(f'Epoch: {epoch + 1}/{num_epochs}, Loss: {loss.item():.6f}')\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5551399f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 256)\n",
      "(1, 201)\n",
      "(256, 201)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/data/localhome/tkapoor/.local/lib/python3.8/site-packages/numpy/ma/core.py:2820: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  _data = np.array(data, dtype=dtype, copy=copy,\n",
      "/usr/local/lib/python3.8/dist-packages/matplotlib/contour.py:1180: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  self.levels = np.asarray(levels_arg).astype(np.float64)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('NLS.mat')\n",
    "\n",
    "# Following is the code to plot the data u vs x and t. u is 256*100\n",
    "# matrix. Use first 75 columns for training and 25 for testing :)\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['tt']\n",
    "u = mat_data['uu']\n",
    "\n",
    "# Use the loaded variables as needed\n",
    "print(x.shape)\n",
    "print(t.shape)\n",
    "print(u.shape)\n",
    "\n",
    "X, T = np.meshgrid(x, t)\n",
    "# Define custom color levels\n",
    "c_levels = np.linspace(np.min(u), np.max(u), 100)\n",
    "\n",
    "# Plot the contour\n",
    "plt.figure()\n",
    "plt.figure(figsize=(15, 5))\n",
    "plt.contourf(T, X, u.T, levels=c_levels, cmap='coolwarm')\n",
    "plt.xlabel('t')\n",
    "plt.ylabel('x')\n",
    "plt.title('Schrondinger-Equation')\n",
    "plt.colorbar()  # Add a colorbar for the contour levels\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "4a32b176",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-38"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-52 + 14"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "d0f80ecc",
   "metadata": {},
   "outputs": [],
   "source": [
    "#t[:, -3]\n",
    "#t[:, -38]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "09b77251",
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib.font_manager import FontProperties\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "font_path = 'times-new-roman.ttf'\n",
    "custom_font = FontProperties(fname=font_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "c3caf826",
   "metadata": {},
   "outputs": [],
   "source": [
    "h = np.abs(u)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "f61424ef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(7, 5))  # You can adjust the width (8 inches) and height (5 inches) as needed\n",
    "\n",
    "# Make sure the font is Times Roman\n",
    "# plt.rcParams['font.family'] = 'Times New Roman'\n",
    "\n",
    "# Perform the prediction\n",
    "with torch.no_grad():\n",
    "    prediction = lem(test_tensor)\n",
    "\n",
    "final_time_output = prediction[-38, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = h[:, -38].reshape(-1, 1)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x, final_out, color='red', linestyle='dotted', linewidth=5, label='Prediction')\n",
    "ax.plot(x, final_true, color='blue', linestyle='solid', linewidth=3, label='True')\n",
    "\n",
    "# Set the axis labels\n",
    "ax.set_xlabel(\"$x$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "ax.set_ylabel(\"$u(x, t)$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the title\n",
    "ax.set_title(\"$t = 1.28$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 3\n",
    "ax.set_xticks([-5, 0, 5])\n",
    "ax.set_yticks([0, 2, 4])\n",
    "\n",
    "plt.xticks(fontsize=20, fontproperties=custom_font)\n",
    "plt.yticks(fontsize=20, fontproperties=custom_font)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('1.28_sch.pdf', dpi=500)\n",
    "plt.savefig('1.28_Sch.png', dpi=500)\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "4b4c3bf5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(7, 5))  # You can adjust the width (8 inches) and height (5 inches) as needed\n",
    "\n",
    "# Make sure the font is Times Roman\n",
    "# plt.rcParams['font.family'] = 'Times New Roman'\n",
    "\n",
    "# Perform the prediction\n",
    "with torch.no_grad():\n",
    "    prediction = lem(test_tensor)\n",
    "\n",
    "final_time_output = prediction[-3, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = h[:, -3].reshape(-1, 1)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x, final_out, color='red', linestyle='dotted', linewidth=5, label='Prediction')\n",
    "ax.plot(x, final_true, color='blue', linestyle='solid', linewidth=3, label='True')\n",
    "\n",
    "# Set the axis labels\n",
    "ax.set_xlabel(\"$x$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "ax.set_ylabel(\"$|u(x, t)|$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the title\n",
    "ax.set_title(\"$t = 1.5$\", fontsize=20, color='black', fontproperties=custom_font)\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 3\n",
    "ax.set_xticks([-5, 0, 5])\n",
    "ax.set_yticks([0, 2, 4])\n",
    "\n",
    "plt.xticks(fontsize=20, fontproperties=custom_font)\n",
    "plt.yticks(fontsize=20, fontproperties=custom_font)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('1.5_sch.pdf', dpi=500)\n",
    "plt.savefig('1.5_Sch.png', dpi=500)\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "f597f4ab",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([40, 256])\n",
      "torch.Size([256])\n",
      "(256, 1)\n",
      "(256, 1)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with torch.no_grad():\n",
    "    prediction = lem(test_tensor)\n",
    "\n",
    "print(prediction.shape)\n",
    "\n",
    "final_time_output = prediction[-38, :]\n",
    "print(final_time_output.shape)\n",
    "\n",
    "final_out = final_time_output.detach().numpy().reshape(-1,1)\n",
    "final_true = u[:,-38].reshape(-1,1)\n",
    "\n",
    "final_true = np.abs(final_true)\n",
    "\n",
    "print(final_out.shape)\n",
    "print(final_true.shape)\n",
    "\n",
    "x = x.reshape(-1, 1)\n",
    "\n",
    "plt.plot(x, final_out)\n",
    "plt.plot(x, final_true)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b72bd573",
   "metadata": {},
   "outputs": [],
   "source": [
    "# t = 1.2802, 1.5551"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "11fa2890",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([40, 256])\n",
      "torch.Size([256])\n",
      "(256, 1)\n",
      "(256, 1)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "with torch.no_grad():\n",
    "    prediction = lem(test_tensor)\n",
    "\n",
    "print(prediction.shape)\n",
    "\n",
    "final_time_output = prediction[-1, :]\n",
    "print(final_time_output.shape)\n",
    "\n",
    "final_out = final_time_output.detach().numpy().reshape(-1,1)\n",
    "final_true = u[:,-3].reshape(-1,1)\n",
    "\n",
    "final_true = np.abs(final_true)\n",
    "#final_out = np.abs(final_out)\n",
    "\n",
    "print(final_out.shape)\n",
    "print(final_true.shape)\n",
    "\n",
    "x = x.reshape(-1, 1)\n",
    "\n",
    "plt.plot(x, final_out)\n",
    "plt.plot(x, final_true)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "c9c29dd5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Error Test:  0.0008894816132805881 \n"
     ]
    }
   ],
   "source": [
    "# Convert NumPy arrays to PyTorch tensors\n",
    "final_out_tensor = torch.from_numpy(final_out)\n",
    "final_true_tensor = torch.from_numpy(final_true)\n",
    "final_true_tensor = torch.abs(final_true_tensor)\n",
    "\n",
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean((final_out_tensor - final_true_tensor)**2)/torch.mean(final_true_tensor**2)\n",
    "print(\"Relative Error Test: \", relative_error_test.item(), \"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f784a4e6",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "pytorch"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
